Como combinar atribuição de variável com as operações de recuperação de dados em T-SQL
-
04-07-2019 - |
Pergunta
Só para esclarecer, eu estou correndo Sybase 12.5.3, mas eu sou levado a acreditar que isso vale para SQL Server 2005 também. Basicamente, eu estou tentando escrever uma consulta que parece um pouco com isso, eu simplificado-lo tanto quanto possível destacar o problema:
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
Esta consulta me dá o seguinte erro: "Erro:. 141 Uma instrução SELECT que atribui um valor a uma variável não deve ser combinada com operações de recuperação de dados"
O único trabalho ao redor que eu tenho para isso até agora, é inserir os dados em tabela derivada em uma tabela temporária e, em seguida, selecione-o de volta para fora novamente. Que bem funciona, mas o fato de que isso não funciona irrita-me. Existe uma maneira melhor de fazer isso?
Solução
O erro parece como descrito em 12.5.3 esd 4 e 7, ele funciona muito bem em 12.5.4 esd 4 e 6.
Parece um bug que foi corrigido, suas únicas opções parecem ser solução ou patch.
ter encontrado o que parece ser o bug 377625
Outras dicas
Eu apenas corri o seu código contra 12.5.3 e ele analisa bem ... não retorna nada, mas é executado. Você talvez simplificou o problema um pouco demais, porque eu não estou vendo nenhum mensagens de erro em tudo.
Só para ficar claro, as seguintes pistas e retorna o que você esperaria.
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
select @a
select @b
select @c