¿Cómo ver los valores de una variable de tabla en tiempo de depuración en T-SQL?


187

¿Podemos ver los valores (filas y celdas) en una variable con valores de tabla en SQL Server Management Studio (SSMS) durante el tiempo de depuración? Si es así, ¿cómo?

ingrese la descripción de la imagen aquí

Respuestas:


31

Eso aún no está implementado de acuerdo con este enlace de Microsoft Connect : Microsoft Connect



2
Y aquí estamos en 2016. No mejor. El enlace Connect tampoco funciona más.
dotNET

55
Para ser honesto, esto no es en realidad una respuesta, ya que no responde la pregunta, la pregunta es cómo hacerlo (no si SSMS tiene alguna característica para ello), indicando que esto no se implementa mientras hay formas de mostrar los valores. muy útil.
Răzvan Flavius ​​Panda

1
Por favor borra esta respuesta. La respuesta a continuación debe ser la respuesta aceptada.
Vortex852456

2018, todavía no.
AgentFire

317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

Inserte la declaración anterior en el punto donde desea ver el contenido de la tabla. El contenido de la tabla se representará como XML en la ventana local, o puede agregarlo @va la ventana de vigilancia.

ingrese la descripción de la imagen aquí


1
Esta es definitivamente una solución que es lo suficientemente buena para que las tablas pequeñas se presenten como XML.
Faiz

44
¡Pero aún así no dejes de leer! ¡Otra opción increíble a continuación! Gran hilo !!
Mike M

1
He tenido tablas grandes con el XML no muy amigable para leer. Doy otro paso: copie el XML y péguelo en xmlgrid.net y podrá ver el XML como una tabla. La visualización de la tabla realmente ayuda. Esperando una versión de SSMS que tenga un visor de tablas como el visor de tablas de datos en Visual Studio.
Moiz Tankiwala

1
Puede agregar ", ROOT ('rootNodeName')" a la cláusula "FOR XML". Esto recopilará varias filas (si las hay) bajo una sola raíz, lo que crea un documento XML legal, que se puede ver con el visualizador XML en lugar del visualizador de texto.
JohnL4

2
Con SQL Server 2016 o nunca, también puede usar la versión JSON de esto DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke

18

Este proyecto https://github.com/FilipDeVos/sp_select tiene un procedimiento almacenadosp_select que permite seleccionar de una tabla temporal.

Uso:

exec sp_select 'tempDb..#myTempTable'

Mientras depura un procedimiento almacenado, puede abrir una nueva pestaña y ejecutar este comando para ver el contenido de la tabla temporal.


66
Ideal para tablas temporales, pero no para variables de tabla
Harag

También se cuelga si hay una transacción abierta, por lo que no sirve de mucho si se usa una depuración de una prueba en un marco como tSQLt que siempre abre una transacción al comienzo de la prueba.
Nathan

1
WOW WOW WOW WOW
vothaison

Bien, sería genial si pudieras ordenar por una sola columna o dos
usuario2486488

6

En el Procedimiento almacenado, cree una tabla temporal global ## temptable y escriba una consulta de inserción dentro de su procedimiento almacenado que inserte los datos en su tabla en esta tabla temporal.

Una vez hecho esto, puede verificar el contenido de la tabla temporal abriendo una nueva ventana de consulta. Simplemente use "select * from ## temptable"


1

Simplemente use la consulta select para mostrar la variable de tabla, donde quiera verificar.

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


Sí, la mejor opción y la más rápida. Simplemente haga esto y resalte y ejecute solo el SQL que desea ejecutar si necesita más control.
Jammin

2
Use select query where, en la ventana de observación?
Faiz

use la selección dentro del procedimiento o cualquier consulta ad hoc que esté ejecutando
solairaja

Pero lo que necesito probar es una función con valores de tabla y arroja el error "Las instrucciones de selección incluidas dentro de una función no pueden devolver datos a un cliente". ¿Hay alguna otra manera, especialmente para examinar a través de las herramientas de depuración proporcionadas?
Faiz

3
No, eso no resuelve la pregunta. Creo que esto no es posible sin complementos adicionales.
Faiz

1

Si está utilizando SQL Server 2016 o más reciente, también puede seleccionarlo como resultado JSON y mostrarlo en JSON Visualizer, es mucho más fácil leerlo que en XML y le permite filtrar resultados.

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

ingrese la descripción de la imagen aquí


0

He llegado a la conclusión de que esto no es posible sin ningún complemento.


Vi algunas vistas previas de Visual Studio 2010. Muy elegante, complejo y detallado ... y el demostrador no sabía si las tablas temporales se podían ver en modo de depuración. Tal vez cuando se lance, pero no contengo la respiración.
Philip Kelley

0

SQL Server Profiler 2014 enumera el contenido del parámetro de valor de tabla. Podría funcionar en versiones anteriores también. Habilite SP: Inicio o RPC: evento completado en el grupo Procedimientos almacenados y la columna TextData y cuando haga clic en la entrada en el registro, tendrá las instrucciones de inserción para la variable de tabla. Luego puede copiar el texto y ejecutarlo en Management Studio.

Salida de muestra:

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

exec uspWhatever @PARAM=@p1

-1

¿Por qué no simplemente seleccionar la tabla y ver la variable de esa manera?

SELECT * FROM @d

44
Por favor, explique cómo hacerlo. Agregar SELECT * FROM @Tablea la secuencia de comandos que se está depurando no emite resultados a la ventana de resultados.
StingyJack

-3

Lo siento muchachos, llego un poco tarde a la fiesta, pero para cualquier persona que se encuentre con esta pregunta en una fecha posterior, he encontrado que la forma más fácil de hacerlo en un procedimiento almacenado es:

  1. Cree una nueva consulta con cualquier parámetro de procedimiento declarado e inicializado en la parte superior.
  2. Pegue en el cuerpo de su procedimiento.
  3. Agregue una buena consulta de selección pasada de moda inmediatamente después de que su variable de tabla se inicialice con datos.
  4. Si 3. no es la última instrucción del procedimiento, establezca un punto de interrupción en la misma línea, comience a depurar y continúe directamente hasta su punto de interrupción.
  5. ¡¡Lucro!!

La respuesta de messi19 debería ser la aceptada en mi humilde opinión, ya que es más simple que la mía y hace el trabajo la mayor parte del tiempo, pero si usted es como yo y tiene una variable de tabla dentro de un bucle que desea inspeccionar, esto funciona bien sin demasiado esfuerzo o complementos externos de SSMS.


Esto es completamente opuesto a lo que el OP está tratando de hacer.
Jamie Marshall
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.