Como ver os valores de uma variável de tabela no momento da depuração no T-SQL?

187

Podemos ver os valores (linhas e células) em uma variável com valor de tabela no SQL Server Management Studio (SSMS) durante o tempo de depuração? Se sim, como?

insira a descrição da imagem aqui

Faiz
fonte

Respostas:

31

Ainda não foi implementado de acordo com este link do Microsoft Connect : Microsoft Connect

rortega
fonte
2
E aqui estamos em 2016. Não há melhor. O link do Connect também não funciona mais.
dotNET
5
Para ser honesto, isso não é realmente uma resposta, pois não responde à pergunta, a questão é como fazê-lo (não se o SSMS tem algum recurso para ele), afirmando que isso não é implementado enquanto existem maneiras de exibir os valores. muito útil
Răzvan Flavius ​​Panda
1
Por favor, apague esta resposta. A resposta abaixo deve ser a resposta aceita.
precisa saber é o seguinte
2018, ainda não.
AgentFire 25/02
317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

Insira a instrução acima no ponto em que deseja exibir o conteúdo da tabela. O conteúdo da tabela será renderizado como XML na janela locals ou você poderá adicionar @và janela de observação.

insira a descrição da imagem aqui

Kirby
fonte
1
Definitivamente, este é um trabalho que é bom o suficiente para que pequenas tabelas sejam apresentadas como XML.
Faiz 16/02
4
Mas ainda não pare de ler! Outra opção incrível abaixo! Great thread !!
Mike M
1
Eu tive grandes tabelas com o XML não muito amigável para ler. Eu dou outro passo - copie o XML e cole no xmlgrid.net e você poderá ver o XML como uma tabela. A visualização da tabela realmente ajuda. Aguardando uma liberação do SSMS que tenha um visualizador de tabela como o visualizador de tabela de dados no Visual Studio.
Moiz Tankiwala
1
Você pode adicionar ", ROOT ('rootNodeName')" à cláusula "FOR XML". Isso coletará várias linhas (se houver) em uma única raiz, o que cria um documento XML legal, que pode ser visualizado com o visualizador de XML em vez do visualizador de texto.
precisa saber é o seguinte
2
Usando o SQL Server 2016 ou nunca, você também pode usar a versão JSON disso DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke
18

Este projeto https://github.com/FilipDeVos/sp_select possui um procedimento armazenado sp_selectque permite selecionar em uma tabela temporária.

Uso:

exec sp_select 'tempDb..#myTempTable'

Ao depurar um procedimento armazenado, você pode abrir uma nova guia e executar este comando para ver o conteúdo da tabela temporária.

James Hulse
fonte
6
Ótimo para tabelas temporárias, mas não para as variáveis de tabela
Harag
Também trava se houver uma transação aberta, portanto, não é muito útil se você estiver usando um teste de depuração em uma estrutura como o tSQLt, que sempre abre uma transação no início do teste.
Nathan
1
WOW WOW WOW WOW
vothaison
Bom - seria ótimo se você pudesse classificar por uma única coluna ou dois
user2486488
6

No procedimento armazenado, crie uma tabela temporária global ## tentable e escreva uma consulta de inserção dentro do procedimento armazenado, que insere os dados na sua tabela nessa tabela temporária.

Feito isso, você pode verificar o conteúdo da tabela temporária abrindo uma nova janela de consulta. Basta usar "selecione * de ## tentável"

messi19
fonte
1

Basta usar a consulta de seleção para exibir a variável da tabela, sempre que você desejar verificar.

http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/

solairaja
fonte
Sim, concordou com a melhor e mais rápida opção. Basta fazer isso, realçar e executar apenas o SQL que você deseja executar, se precisar de mais controle.
Jammin
2
Use a consulta de seleção onde, na janela de inspeção?
Faiz
usar o seleto dentro do procedimento ou qualquer consulta ad hoc que você está executando
solairaja
Mas o que eu preciso testar é uma função com valor de tabela e gera o erro "As instruções Select incluídas em uma função não podem retornar dados para um cliente". Existe alguma outra maneira, especialmente para examinar através das ferramentas de depuração fornecidas?
Faiz
3
Não, isso não resolve a questão. Eu acho que isso não é possível sem nenhum plug-in adicional.
Faiz
1

Se você estiver usando o SQL Server 2016 ou mais recente, também poderá selecioná-lo como resultado JSON e exibi-lo no JSON Visualizer, é muito mais fácil lê-lo do que em XML e permite filtrar resultados.

DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)

insira a descrição da imagem aqui

Sousuke
fonte
0

Cheguei à conclusão de que isso não é possível sem nenhum plug-in.

Faiz
fonte
Vi algumas visualizações do Visual Studio 2010. Muito sofisticadas, complexas e detalhadas ... e o demonstrador não sabia se as tabelas temporárias podiam ser exibidas no modo de depuração. Talvez quando for lançado, mas não estou prendendo a respiração.
Philip Kelley
0

O SQL Server Profiler 2014 lista o conteúdo do parâmetro de valor da tabela. Também pode funcionar em versões anteriores. Ative o evento SP: Starting ou RPC: Completed no grupo Stored Procedures e na coluna TextData e, ao clicar na entrada do log, você terá as instruções de inserção para a variável da tabela. Você pode copiar o texto e executar no Management Studio.

Saída de amostra:

declare @p1 dbo.TableType
insert into @p1 values(N'A',N'B')
insert into @p1 values(N'C',N'D')

exec uspWhatever @PARAM=@p1
user3285954
fonte
-1

Por que não selecionar a tabela e visualizar a variável dessa maneira?

SELECT * FROM @d
Kyle Hoener
fonte
4
Por favor, explique como fazer isso. Adicionar um SELECT * FROM @Tableao script que está sendo depurado não emite resultados para a janela de resultados.
StingyJack
-3

Desculpe pessoal, estou um pouco atrasado para a festa, mas para quem se deparar com essa pergunta posteriormente, achei a maneira mais fácil de fazer isso em um procedimento armazenado:

  1. Crie uma nova consulta com qualquer parâmetro de procedimento declarado e inicializado na parte superior.
  2. Cole no corpo do seu procedimento.
  3. Adicione uma consulta de seleção antiquada imediatamente após a variável de tabela ser inicializada com dados.
  4. Se 3. não for a última instrução do procedimento, defina um ponto de interrupção na mesma linha, inicie a depuração e continue diretamente no seu ponto de interrupção.
  5. Lucro!!

A resposta de messi19 deve ser o IMHO aceito, já que é mais simples que o meu e faz o trabalho a maior parte do tempo, mas se você é como eu e tem uma variável de tabela dentro de um loop que deseja inspecionar, isso faz o trabalho bem sem muito esforço ou plugins SSMS externos.

Kenny83
fonte
Isso é completamente o oposto do que o OP está tentando fazer.
Jamie Marshall