我想創建SQL Server 2005中返回的查詢是從我的節目傳遞了一個表格的函數...添加執行(@query)函數錯誤「不正確的語法附近執行
但是,當我創建與此腳本函數:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
該腳本示出了關鍵字
附近有語法錯誤的錯誤消息「EXECUTE`
我想創建SQL Server 2005中返回的查詢是從我的節目傳遞了一個表格的函數...添加執行(@query)函數錯誤「不正確的語法附近執行
但是,當我創建與此腳本函數:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
該腳本示出了關鍵字
附近有語法錯誤的錯誤消息「EXECUTE`
這是完全正確的 - 你不能執行任意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。
這是什麼RDBMS? –
mssql?... mysql ..?甲骨文..? –
SQL Server 2005 – XMozart