我从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。
请建议补救措施。谢谢!
答案 0 :(得分:1)
是的,我不认为你可以使用子查询作为存储过程的参数。 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)
答案 1 :(得分:0)
使用另一个var来存储子查询的值并且它有效。