Использование результирующего набора запроса в качестве параметра в хранимом вызове процедуры - PullRequest
1 голос
/ 21 сентября 2011

Я извлек следующий фрагмент из Profiler (из оператора, который не выполняется из-за «синтаксической ошибки рядом с»):

exec sp_executesql @statement = N'CREATE TABLE --other stuff...

  DECLARE @student_id_ticket INT
  EXEC @student_id_ticket = systecsys_get_next_ticket (select top 1 table_id from systecsys_table where name like ''%Student_List%''), ''n'', 1

--INSERT statement using this value and other stuff

Я знаю, что это происходит из-за подзапроса, потому что, когда я использую жестко закодированное значение, оно работает. Следовательно, это может быть связано с проблемой асинхронной обработки или общей синтаксической ошибкой. T-SQL 2000.

Пожалуйста, предложите лекарство. Спасибо!

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Да, я не думаю, что вы можете использовать подзапрос в качестве параметра хранимой процедуры.Спецификация для команды EXEC гласит, что value должно быть object name, character string.

. Или используйте другую переменную для сохранения результатов, или измените хранимую процедуру в функцию.

DECLARE @student_id_ticket INT, @table_id INT
SELECT @table_id = (select top 1 table_id from systecsys_table where name like ''%Student_List%'')
EXEC @student_id_ticket = systecsys_get_next_ticket @table_id, ''n'', 1

или если systecsys_get_next_ticket является функцией:

DECLARE @student_id_ticket INT
SELECT @student_id_ticket = systecsys_get_next_ticket((select top 1 table_id from systecsys_table where name like ''%Student_List%''), ''n'', 1)
0 голосов
/ 21 сентября 2011

Использовал другую переменную для хранения значения подзапроса, и он работал.

...