Tengo una tabla (no diseñada por mí) que tiene 20 columnas con nombres variables. Es decir, dependiendo del tipo de registro que esté viendo, el nombre aplicable de la columna puede cambiar.
Los posibles nombres de columna se almacenan en otra tabla, que puedo consultar muy fácilmente.
Por lo tanto, la consulta que realmente estoy buscando es algo como esto:
SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type),
Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type)
FROM Tbl1
WHERE Type = @Type
Obviamente eso no funciona, entonces, ¿cómo puedo obtener un resultado similar?
'
He intentado construir una cadena de consulta e
Resulta que estaba usando una consulta incorrecta para construir el SQL dinámico y, como tal, construí una cadena vacía. SQL Server definitivamente ejecutó la cadena vacía correctamente.EXECUTE
ing, pero eso solo devuelve "Comando (s) completados con éxito" y no parece devolver un conjunto de filas.
Tenga en cuenta que la razón por la que necesito que esto ocurra, en lugar de simplemente codificar los nombres de las columnas, es que los nombres de las columnas son configurables por el usuario.
fuente
Respuestas:
Prueba el siguiente código:
Esto devuelve la instrucción SELECT:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
fuente
Esto suena excelente para una solución de pantalla frontal. La consulta 1 retiraría sus datos, la consulta 2 retiraría los nombres de columna y el código cuando construye cualquier estructura que use para mostrar los encabezados de la segunda consulta.
Si bien es posible un método de SQL puro, será un SQL dinámico y el mantenimiento del código sería una pesadilla.
También es probable que
sp_executesql
esté buscando y no soloEXECUTE N'Query String'
eso puede solucionar su problema de comando completado con éxito.fuente