使用查询的结果集作为存储的proc调用中的参数

时间:2011-09-20 20:34:00

标签: sql database tsql sql-server-2000

我从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 个答案:

答案 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来存储子查询的值并且它有效。