AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / 问题

All perguntas(dba)

Martin Hope
Gareth
Asked: 2015-05-01 23:50:22 +0800 CST

envio de procedimento armazenado sp_send_dbmail com anexo

  • 15

Recebi a tarefa de enviar um pequeno relatório mensal para um dos meus clientes. O relatório já era executado manualmente na instância, a saída copiada para uma planilha e enviada ao cliente como um anexo.

Estou procurando uma solução mais permanente, então pretendo usar sp_send_dbmailo procedimento armazenado para executar a consulta e enviá-la como anexo.

Tudo funciona menos a formatação da mensagem. Inicialmente tentei anexar a saída como um arquivo CSV com um @query_result_seperator = ','mas os resultados estavam em toda parte!

Quando executo o relatório normalmente, a saída parece boa no SQL. Mas enviá-lo como um CSV ou apenas no corpo da mensagem não.

Acho que pode funcionar melhor se eu exportar a saída como HTML e enviá-la como um anexo/ou como XML, mas não sei como fazer isso.

Alguém tem alguma sugestão?

Desde já, obrigado!

sql-server stored-procedures
  • 2 respostas
  • 83675 Views
Martin Hope
Boaz
Asked: 2015-04-27 01:21:45 +0800 CST

postgresql renomeia uma chave estrangeira depois de renomear uma tabela

  • 15

Eu renomeei uma tabela e, aparentemente, uma chave estrangeira nela não é alterada e está causando problemas, embora quando \d erroreu recebo:
"error_test_id_fkey" FOREIGN KEY (test_id) REFERENCES test(id) ON DELETE CASCADE

Qual a única relação com o errornome, é o nome (estranho)

De qualquer forma - não tenho nenhum problema em excluir a chave estrangeira e recriá-la, mas não consigo descobrir como fazer isso

postgresql
  • 1 respostas
  • 17747 Views
Martin Hope
swasheck
Asked: 2015-02-05 14:09:42 +0800 CST

stats_column_id e index_column_id não são atualizados com a ordem física do índice clusterizado alterada

  • 15

A menos que eu esteja entendendo mal a finalidade da coluna, o código a seguir indica que uma alteração na estrutura do índice clusterizado não altera a posição ordinal ( stats_column_id) da coluna no sys.stats_columns DMV. (Testado em AdventureWorks2014, AdventureWorks2008R2)

select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i 
join sys.index_columns ic
    on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c 
    on i.object_id = c.object_id
    and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;

select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s 
join sys.stats_columns sc
    on s.object_id = sc.object_id
    and s.stats_id = sc.stats_id
join sys.columns c 
    on s.object_id = c.object_id
    and sc.column_id = c.column_id
join sys.tables t 
    on s.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;

dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;

ALTER TABLE [Person].[BusinessEntityAddress] DROP CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID]
GO

ALTER TABLE [Person].[BusinessEntityAddress] ADD  CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID] PRIMARY KEY CLUSTERED 
(
    AddressID ASC,
    [BusinessEntityID] ASC, 
    [AddressTypeID] ASC
)
GO


select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i 
join sys.index_columns ic
    on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c 
    on i.object_id = c.object_id
    and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;

select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s 
join sys.stats_columns sc
    on s.object_id = sc.object_id
    and s.stats_id = sc.stats_id
join sys.columns c 
    on s.object_id = c.object_id
    and sc.column_id = c.column_id
join sys.tables t 
    on s.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;

dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;

No entanto, os vetores de densidade indicam uma alteração na coluna inicial do objeto de índice/estatística. Isso é um mal-entendido fundamental da minha parte? Em caso afirmativo, como encontraria a coluna inicial de um objeto de estatísticas usando DMVs?

Versões testadas do SQL Server: 2008R2, 2014

sql-server statistics
  • 2 respostas
  • 715 Views
Martin Hope
mounaim
Asked: 2014-12-06 06:21:22 +0800 CST

Atualização de chave primária em cascata para todas as chaves estrangeiras de referência

  • 15

É possível atualizar um valor de coluna de chave primária com a atualização em cascata entre todas as chaves estrangeiras que fazem referência a ele?

# EDIT 1: Quando eu executo a consulta followinq

select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') 

, vejo que update_referential_action está definido como 0. Assim, NENHUMA AÇÃO é executada após atualizar minhas colunas de chaves primárias. Como posso atualizar as chaves estrangeiras para torná-las ON CASCADE UPDATE ?

# EDIT 2:
Para criar scripts ou descartar todas as chaves estrangeiras em seu esquema, execute o seguinte script (retirado daqui )

DECLARE @schema_name sysname;

DECLARE @table_name sysname;

DECLARE @constraint_name sysname;

DECLARE @constraint_object_id int;

DECLARE @referenced_object_name sysname;

DECLARE @is_disabled bit;

DECLARE @is_not_for_replication bit;

DECLARE @is_not_trusted bit;

DECLARE @delete_referential_action tinyint;

DECLARE @update_referential_action tinyint;

DECLARE @tsql nvarchar(4000);

DECLARE @tsql2 nvarchar(4000);

DECLARE @fkCol sysname;

DECLARE @pkCol sysname;

DECLARE @col1 bit;

DECLARE @action char(6);  

DECLARE @referenced_schema_name sysname;



DECLARE FKcursor CURSOR FOR

     select OBJECT_SCHEMA_NAME(parent_object_id)

         , OBJECT_NAME(parent_object_id), name, OBJECT_NAME(referenced_object_id)

         , object_id

         , is_disabled, is_not_for_replication, is_not_trusted

         , delete_referential_action, update_referential_action, OBJECT_SCHEMA_NAME(referenced_object_id)

    from sys.foreign_keys

    order by 1,2;

OPEN FKcursor;

FETCH NEXT FROM FKcursor INTO @schema_name, @table_name, @constraint_name

    , @referenced_object_name, @constraint_object_id

    , @is_disabled, @is_not_for_replication, @is_not_trusted

    , @delete_referential_action, @update_referential_action, @referenced_schema_name;

WHILE @@FETCH_STATUS = 0

BEGIN



      IF @action <> 'CREATE'

        SET @tsql = 'ALTER TABLE '

                  + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)

                  + ' DROP CONSTRAINT ' + QUOTENAME(@constraint_name) + ';';

    ELSE

        BEGIN

        SET @tsql = 'ALTER TABLE '

                  + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)

                  + CASE @is_not_trusted

                        WHEN 0 THEN ' WITH CHECK '

                        ELSE ' WITH NOCHECK '

                    END

                  + ' ADD CONSTRAINT ' + QUOTENAME(@constraint_name)

                  + ' FOREIGN KEY (';

        SET @tsql2 = '';

        DECLARE ColumnCursor CURSOR FOR

            select COL_NAME(fk.parent_object_id, fkc.parent_column_id)

                 , COL_NAME(fk.referenced_object_id, fkc.referenced_column_id)

            from sys.foreign_keys fk

            inner join sys.foreign_key_columns fkc

            on fk.object_id = fkc.constraint_object_id

            where fkc.constraint_object_id = @constraint_object_id

            order by fkc.constraint_column_id;

        OPEN ColumnCursor;

        SET @col1 = 1;

        FETCH NEXT FROM ColumnCursor INTO @fkCol, @pkCol;

        WHILE @@FETCH_STATUS = 0

        BEGIN

            IF (@col1 = 1)

                SET @col1 = 0;

            ELSE

            BEGIN

                SET @tsql = @tsql + ',';

                SET @tsql2 = @tsql2 + ',';

            END;

            SET @tsql = @tsql + QUOTENAME(@fkCol);

            SET @tsql2 = @tsql2 + QUOTENAME(@pkCol);

            FETCH NEXT FROM ColumnCursor INTO @fkCol, @pkCol;

        END;

        CLOSE ColumnCursor;

        DEALLOCATE ColumnCursor;

       SET @tsql = @tsql + ' ) REFERENCES ' + QUOTENAME(@referenced_schema_name) + '.' + QUOTENAME(@referenced_object_name)

                  + ' (' + @tsql2 + ')';

        SET @tsql = @tsql

                  + ' ON UPDATE ' + CASE @update_referential_action

                                        WHEN 0 THEN 'NO ACTION '

                                        WHEN 1 THEN 'CASCADE '

                                        WHEN 2 THEN 'SET NULL '

                                        ELSE 'SET DEFAULT '

                                    END

                  + ' ON DELETE ' + CASE @delete_referential_action

                                        WHEN 0 THEN 'NO ACTION '

                                        WHEN 1 THEN 'CASCADE '

                                        WHEN 2 THEN 'SET NULL '

                                        ELSE 'SET DEFAULT '

                                    END

                  + CASE @is_not_for_replication

                        WHEN 1 THEN ' NOT FOR REPLICATION '

                        ELSE ''

                    END

                  + ';';

        END;

    PRINT @tsql;

    IF @action = 'CREATE'

        BEGIN

        SET @tsql = 'ALTER TABLE '

                  + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name)

                  + CASE @is_disabled

                        WHEN 0 THEN ' CHECK '

                        ELSE ' NOCHECK '

                    END

                  + 'CONSTRAINT ' + QUOTENAME(@constraint_name)

                  + ';';

        PRINT @tsql;

        END;

    FETCH NEXT FROM FKcursor INTO @schema_name, @table_name, @constraint_name

        , @referenced_object_name, @constraint_object_id

        , @is_disabled, @is_not_for_replication, @is_not_trusted

        , @delete_referential_action, @update_referential_action, @referenced_schema_name;

END;

CLOSE FKcursor;

DEALLOCATE FKcursor;  

Para gerar o script de chaves estrangeiras DROP, modifique o valor @action para ser igual a 'DROP' na cláusula de declaração:

DECLARE @action char(6) = 'DROP';
sql-server sql-server-2008
  • 3 respostas
  • 67204 Views
Martin Hope
gotqn
Asked: 2014-11-20 05:08:33 +0800 CST

Como obter o uso da CPU pelo banco de dados para uma instância específica?

  • 15

Encontrei as seguintes consultas para detectar o uso da CPU pelo banco de dados, mas elas estão mostrando resultados diferentes:

WITH DB_CPU_Stats
AS
(
    SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], 
      SUM(total_worker_time) AS [CPU_Time_Ms]
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY (
                    SELECT CONVERT(int, value) AS [DatabaseID] 
                  FROM sys.dm_exec_plan_attributes(qs.plan_handle)
                  WHERE attribute = N'dbid') AS F_DB
    GROUP BY DatabaseID
)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
       DatabaseName,
        [CPU_Time_Ms], 
       CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
--WHERE DatabaseID > 4 -- system databases
--AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);

A consulta acima informa que o problema é com um dos meus bancos de dados (quase 96%).

E a consulta abaixo informa que o problema é com os bancos de dados mestre e de distribuição (cerca de 90%):

DECLARE @total INT
SELECT @total=sum(cpu) FROM sys.sysprocesses sp (NOLOCK)
    join sys.sysdatabases sb (NOLOCK) ON sp.dbid = sb.dbid

SELECT sb.name 'database', @total 'system cpu', SUM(cpu) 'database cpu', CONVERT(DECIMAL(4,1), CONVERT(DECIMAL(17,2),SUM(cpu)) / CONVERT(DECIMAL(17,2),@total)*100) '%'
FROM sys.sysprocesses sp (NOLOCK)
JOIN sys.sysdatabases sb (NOLOCK) ON sp.dbid = sb.dbid
--WHERE sp.status = 'runnable'
GROUP BY sb.name
ORDER BY CONVERT(DECIMAL(4,1), CONVERT(DECIMAL(17,2),SUM(cpu)) / CONVERT(DECIMAL(17,2),@total)*100) desc

Eu verifiquei se o sys.sysprocessesestá decpreated. Isso significa que os resultados da segunda consulta estão errados?

sql-server sql-server-2012
  • 4 respostas
  • 78425 Views
Martin Hope
gotqn
Asked: 2014-10-04 06:32:41 +0800 CST

Maneira alternativa de compactar NVARCHAR(MAX)?

  • 15

Estou tentando compactar algumas tabelas que possuem NVARCHAR(MAX)campos. Infelizmente, o rowe a pagecompactação não têm o impacto desejado (apenas ~ 100/200 MB salvos para a tabela de 20 GB). Além disso, não consigo aplicar armazenamento de coluna e compactações de arquivamento de armazenamento de coluna porque eles não oferecem suporte à compactação de NVARCHAR(MAX)campos.

Alguém pode dizer se eu tenho alguma alternativa aqui?

Eu também acho que a compressão rowe pagenão tem efeito porque o conteúdo das NVARCHAR(MAX)colunas é único.

sql-server sql-server-2014
  • 2 respostas
  • 13609 Views
Martin Hope
vaab
Asked: 2014-09-03 01:49:44 +0800 CST

No Postgres, como obter uma lista de pontos de salvamento definidos atualmente?

  • 15

Estou usando postgres SAVEPOINT que cria um novo ponto de salvamento na transação atual e gostaria de exibir a lista de pontos de salvamento atualmente definidos em uma conexão.

Para ser mais preciso: gostaria de verificar qual nome NÃO acionaria o erro "no such savepoint" em uma conexão.

postgresql transaction
  • 1 respostas
  • 2438 Views
Martin Hope
Adam Matan
Asked: 2014-07-16 12:57:21 +0800 CST

Postgresql: defina a codificação padrão do cliente psql

  • 15

Quando me conecto a um banco de dados Postgresql usando psql, geralmente recebo estas mensagens:

=> SELECT * FROM question_view ;
ERROR:  character with byte sequence 0xd7 0x9e in encoding "UTF8" has no equivalent in encoding "LATIN1"

Seguindo esta resposta SO , entendo que devo alterar a codificação do cliente de acordo:

SET client_encoding = 'UTF8';

Alterar o client_encodingtoda vez que me conecto ao banco de dados é complicado. Existe uma maneira de configurar permanentemente essa configuração, seja no .pgpassarquivo ou em qualquer outro lugar?

postgresql configuration
  • 2 respostas
  • 45326 Views
Martin Hope
Nuno
Asked: 2014-07-06 04:34:39 +0800 CST

ROW_FORMAT - COMPACTADO vs COMPACTO vs DINÂMICO

  • 15

No MySQL InnoDB, qual é a diferença entre COMPRESSED, COMPACT e DYNAMIC para ROW_FORMAT?

Quais são os benefícios entre si?

mysql innodb
  • 1 respostas
  • 11220 Views
Martin Hope
jamauss
Asked: 2014-05-08 22:05:21 +0800 CST

Obtenha a contagem e o tipo de sequência a partir dos dados de vitórias-derrotas-empate

  • 15

Eu fiz um SQL Fiddle para esta questão, se isso facilitar as coisas para qualquer um.

Eu tenho uma espécie de banco de dados de esportes de fantasia e o que estou tentando descobrir é como obter dados de "seqüência atual" (como 'W2' se o time venceu suas últimas 2 partidas ou 'L1' se eles perderam seu último confronto após vencer o confronto anterior - ou 'T1' se empataram no confronto mais recente).

Aqui está o meu esquema básico:

CREATE TABLE FantasyTeams (
  team_id BIGINT NOT NULL
)

CREATE TABLE FantasyMatches(
    match_id BIGINT NOT NULL,
    home_fantasy_team_id BIGINT NOT NULL,
    away_fantasy_team_id BIGINT NOT NULL,
    fantasy_season_id BIGINT NOT NULL,
    fantasy_league_id BIGINT NOT NULL,
    fantasy_week_id BIGINT NOT NULL,
    winning_team_id BIGINT NULL
)

Um valor de NULLna winning_team_idcoluna indica um empate para essa partida.

Aqui está um exemplo de declaração DML com alguns dados de amostra para 6 equipes e 3 semanas de confrontos:

INSERT INTO FantasyTeams
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6

INSERT INTO FantasyMatches
SELECT 1, 2, 1, 2, 4, 44, 2
UNION
SELECT 2, 5, 4, 2, 4, 44, 5
UNION
SELECT 3, 6, 3, 2, 4, 44, 3
UNION
SELECT 4, 2, 4, 2, 4, 45, 2
UNION
SELECT 5, 3, 1, 2, 4, 45, 3
UNION
SELECT 6, 6, 5, 2, 4, 45, 6
UNION
SELECT 7, 2, 6, 2, 4, 46, 2
UNION
SELECT 8, 3, 5, 2, 4, 46, 3
UNION
SELECT 9, 4, 1, 2, 4, 46, NULL

GO

Aqui está um exemplo da saída desejada (com base no DML acima) que estou tendo problemas até mesmo para descobrir como derivar:

| TEAM_ID | STEAK_TYPE | STREAK_COUNT |
|---------|------------|--------------|
|       1 |          T |            1 |
|       2 |          W |            3 |
|       3 |          W |            3 |
|       4 |          T |            1 |
|       5 |          L |            2 |
|       6 |          L |            1 |

Eu tentei vários métodos usando subconsultas e CTEs, mas não consigo juntar. Eu gostaria de evitar o uso de um cursor, pois poderia ter um grande conjunto de dados para executar isso no futuro. Sinto que pode haver uma maneira envolvendo variáveis ​​de tabela que unem esses dados a si mesmos de alguma forma, mas ainda estou trabalhando nisso.

Informações Adicionais: Pode haver um número variável de equipes (qualquer número par entre 6 e 10) e o total de confrontos aumentará em 1 para cada equipe a cada semana. Alguma ideia de como devo fazer isso?

sql-server sql-server-2012
  • 3 respostas
  • 3041 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve