¿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í

Faiz
fuente

Respuestas:

31

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

rortega
fuente
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í

Kirby
fuente
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.

James Hulse
fuente
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"

messi19
fuente
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/

solairaja
fuente
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í

Sousuke
fuente
0

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

Faiz
fuente
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
usuario3285954
fuente
-1

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

SELECT * FROM @d
Kyle Hoener
fuente
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.

Kenny83
fuente
Esto es completamente opuesto a lo que el OP está tratando de hacer.
Jamie Marshall