2011-09-20 21 views
1

我提取從探查下面的代碼段(從聲明由於失敗「附近有語法錯誤,」):在一個存儲過程調用使用的結果集的查詢作爲參數的

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

你嘗試過擺脫括號,或添加圍繞整個systecsys_get_next_ticket參數列表另一套? – samjudson

+0

我試過後者。現在會嘗試另一個。 thx – ppecher

+0

沒有人工作:( – ppecher

回答

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) 
0

使用另一個var來存儲子查詢的值,它工作。

相關問題