2012-12-19 30 views
1

我想創建SQL Server 2005中返回的查詢是從我的節目傳遞了一個表格的函數...添加執行(@query)函數錯誤「不正確的語法附近執行

但是,當我創建與此腳本函數:

CREATE FUNCTION fn_test (@source varchar(255)) 
RETURNS TABLE AS 
RETURN 
    EXECUTE (@source) 

該腳本示出了關鍵字

附近有語法錯誤的錯誤消息「EXECUTE`

+0

這是什麼RDBMS? –

+0

mssql?... mysql ..?甲骨文..? –

+0

SQL Server 2005 – XMozart

回答

3

這是完全正確的 - 你不能執行任意SQL作爲內嵌table valued function的一部分:

--Transact-SQL Inline Table-Valued Function Syntax 
CREATE FUNCTION [ schema_name. ] function_name 
([ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ] 
    ] 
) 
RETURNS TABLE 
    [ WITH <function_option> [ ,...n ] ] 
    [ AS ] 
    RETURN [ (] select_stmt [) ] 
[ ; ] 

如果需要(*)有一個設施中傳遞任意SQL進入一個SQL Server對象並讓它執行它,請使用存儲過程而不是函數。函數並不意味着改變數據庫的狀態,但任意的SQL可以做...任意的事情。 (*)你不知道。你不知道。


作爲一個過程,這將是:

CREATE PROCEDURE test (@source varchar(255)) 
AS 
    EXECUTE (@source) 

但由於是在這一點上可能明顯 - 如果要執行存儲爲字符串任意SQL,你可能也只是直接調用EXECUTE在他們。這是我放入(*)時所指的內容的一部分。另一部分是 - 爲什麼將它以字符串變量的形式發送到服務器 - 爲什麼不直接發送要執行的SQL?無論如何要在服務器上運行任意SQL。

+0

對不起,我不知道我應該怎麼做,如果我使用存儲過程,你能告訴我如何使用存儲過程中的這樣的事情..? – XMozart

+0

這是因爲我嘗試創建動態函數/存儲過程,所以我創建它.. 並感謝你的答案,它的工作.. :) – XMozart

相關問題