Eu tenho uma tabela (não projetada por mim) que possui 20 colunas com nomes variáveis. Ou seja, dependendo do tipo de registro que você está visualizando, o nome aplicável da coluna pode ser alterado.
Os possíveis nomes de colunas estão armazenados em outra tabela, que posso consultar com muita facilidade.
Portanto, a consulta que estou procurando é mais ou menos assim:
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 que isso não funciona, então como posso obter um resultado semelhante?
'
Eu tentei criar uma string de consulta e
Acontece que eu estava usando uma consulta incorreta para criar o SQL dinâmico e, como tal, construiu uma string vazia. O SQL Server definitivamente executou a sequência vazia corretamente.EXECUTE
inseri-la, mas isso retorna "Command (s) Completed Successfully" e não parece retornar um conjunto de linhas.
Observe que a razão pela qual eu preciso que isso ocorra, em vez de simplesmente codificar os nomes das colunas, é que os nomes das colunas são configuráveis pelo usuário.
fonte
Respostas:
Tente o seguinte código:
Isso retorna a instrução SELECT:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
fonte
Isso parece excelente para uma solução de exibição de front-end. A consulta 1 recuaria seus dados, a consulta 2 recuaria os nomes das colunas e o código quando você cria a estrutura que você usa para exibir e define os cabeçalhos da segunda consulta.
Embora seja possível um método SQL puro, ele será um SQL dinâmico e a manutenção do código seria um pesadelo.
Você provavelmente está procurando
sp_executesql
e não apenasEXECUTE N'Query String'
como isso pode resolver seu problema de comando concluído com êxito.fonte