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 / Perguntas / 257604
Accepted
CaM
CaM
Asked: 2020-01-17 12:10:53 +0800 CST2020-01-17 12:10:53 +0800 CST 2020-01-17 12:10:53 +0800 CST

O procedimento mostra resultados de forma diferente no SSMS 18.4 do que no SSMS 17.9

  • 772

Eu tenho um procedimento armazenado complexo que consulta pastas de rede específicas, coleta os nomes dos arquivos de backup do SQL Server que encontra lá e processa cada arquivo para obter detalhes. Se eu executar o procedimento do SSMS versão 18.4, ele dará os resultados errados. Mas se eu executá-lo no SSMS versão 17.9, o procedimento me fornecerá os dados que espero ver.

Eu posso recriar o problema com um exemplo mais simples:

CREATE OR ALTER PROCEDURE TestOutput (
    @HostName nvarchar(255),
    @DbName nvarchar(255)
    )
AS
BEGIN
    Declare @cmd nvarchar(500);
    Declare @basePath nvarchar(500) = '\\Server1\DB_Backups\SQL\' + @HostName + '\' + @DbName + '\';

    Create table #FullFileList (backupPath nvarchar(255), backupFile NVARCHAR(255)) ;

    SET @cmd = 'DIR /b "' + @basePath + 'Full\"';
    INSERT INTO  #FullFileList (backupFile) EXEC master.sys.xp_cmdshell @cmd;
    update #FullFileList set backupPath = @basePath + 'Full\';

    SET @cmd = 'DIR /b "' + @basePath + 'Diff\"';
    INSERT INTO  #FullFileList (backupFile) EXEC master.sys.xp_cmdshell @cmd 
    update #FullFileList set backupPath = @basePath + 'Diff\' where backupPath is null;     

    SET @cmd = 'DIR /b "' + @basePath + 'Log\"'
    INSERT INTO  #FullFileList (backupFile) EXEC master.sys.xp_cmdshell @cmd;
    update #FullFileList set backupPath = @basePath + 'Log\' where backupPath is null;

    select * from #FullFileList;
    select count(*) from #FullFileList;
END
GO

Se eu executar este procedimento do SSMS versão 17.9 em uma pasta pai (caminho base) que contém 1.950 arquivos nas três subpastas, a saída será 1.953 linhas (três linhas com nomes de arquivo nulos estão na lista, uma para cada pasta). E a saída da contagem é 1.953.

\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Full\    Host_Name_DB_Name_FULL_20191230_040407.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Full\    Host_Name_DB_Name_FULL_20200106_040407.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Full\    Host_Name_DB_Name_FULL_20200113_040407.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Full\    NULL
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200103_050507.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200104_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200105_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200107_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200108_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200109_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200110_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200111_050507.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200112_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200114_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200115_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    Host_Name_DB_Name_DIFF_20200116_050506.bak
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Diff\    NULL
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200112_104703.trn
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200112_105003.trn
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200112_105302.trn
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200112_105602.trn
[... Snip ...]
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200116_144402.trn
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ Host_Name_DB_Name_LOG_20200116_144703.trn
\\Server1\DB_Backups\SQL\Host_Name\DB_Name\Log\ NULL

 1953

No entanto, se eu executar esse mesmo código no SSMS versão 18.4, o procedimento produzirá 9 linhas de saída. Ele também me diz que a contagem é de 22 linhas, o que também é falso: a saída acabou de ser fornecida; havia apenas nove linhas retornadas.

\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Full\ WTR320MSDNCM_DBMonitoring_FULL_20191230_040407.bak
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Full\ WTR320MSDNCM_DBMonitoring_FULL_20200106_040407.bak
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Full\ WTR320MSDNCM_DBMonitoring_FULL_20200113_040407.bak
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Full\ NULL
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Log\  WTR320MSDNCM_DBMonitoring_LOG_20200112_104703.trn
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Log\  WTR320MSDNCM_DBMonitoring_LOG_20200112_105003.trn
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Log\  WTR320MSDNCM_DBMonitoring_LOG_20200112_105302.trn
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Log\  WTR320MSDNCM_DBMonitoring_LOG_20200112_105602.trn
\\wtrnas\DB_Backups\SQL\wtr320msdncm\DBMonitoring\Log\  WTR320MSDNCM_DBMonitoring_LOG_20200112_105902.trn

22

(são todas as linhas retornadas quando executadas a partir de 18.4)

Novamente, exatamente o mesmo código, mesmo mecanismo de banco de dados no back-end (Microsoft SQL Server 2017 CU18 Enterprise Edition no Windows Server 2012 R2 Standard), apontado para a mesma estrutura de pastas no Server1. A única diferença é a versão do SSMS que executa o comando create procedure.

Observe que o SQLCMD também fornece a saída correta.

Eu tentei desinstalar e reinstalar o SSMS 18.4. Eu também tentei mudar isso para uma tabela não temporária. A versão do SSMS 18.4 cria 9 linhas de dados, não 1953 linhas, que posso visualizar de fora do procedimento. Eu tentei mudar a ordem em que as pastas são processadas; isso não altera o resultado.

O SQL Server tem todas as permissões necessárias para navegar nas três pastas em questão; ele realmente escreveu esses arquivos.

Mas por que a versão do SSMS é um fator? Isso tudo deve ser executado a partir do servidor, que não está mudando aqui. Como posso fazer este procedimento funcionar corretamente em 18.4, ou por que NÃO está funcionando corretamente?

sql-server ssms
  • 1 1 respostas
  • 99 Views

1 respostas

  • Voted
  1. Best Answer
    Chris Branic
    2020-01-18T05:49:37+08:002020-01-18T05:49:37+08:00

    Eu vejo seu comentário que

    Fazendo explicitamente um "SET ROWCOUNT 0;" no procedimento resolveu

    Você pode conseguir o mesmo configurando as opções de menu no SSMS:

    Tools > Options > Query Execution > SET ROWCOUNT: 0
    
    • 4

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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