我在寫一個將表名作爲參數的函數。 我知道我需要的表名,但表名+表所有者是動態傳入的(我需要這樣做,但目前不工作)。如何從函數運行查詢時,表名作爲參數傳遞
它看起來是這樣的:
CREATE FUNCTION [myowner].
[alex_diff](@fromdate datetime, @todate datetime, @table_name varchar(256), @country_code varchar(3))
RETURNS int
AS
BEGIN
...
set @date_string = (select calendar_month2 from ??? where [email protected]_year and country_code = @country_code)
...
END
我不能把@table_name到位的 '???' 這給了我錯誤:
Msg 1087, Level 16, State 1, Procedure alex_business_date_diff, Line 53 Must declare the table variable "@table_name".
我能做些什麼對動態傳遞表名執行SQL?
我曾嘗試做如下:
set @statement = 'select @output=' + @column_name + ' from ' + @table_name + ' where calendar_year=' + cast(@current_year as varchar(4)) + ' and country_code = ' + @country_code;
EXEC sp_executesql @statement, N'@output varchar(31) OUTPUT', @date_string OUTPUT
但得到這個錯誤(當我嘗試運行功能):
Msg 557, Level 16, State 2, Line 1 Only functions and some extended stored procedures can be executed from within a function.
你不能在一個函數執行動態SQL,所以這實在是一個存儲過程 – Lamak 2012-03-16 18:59:07
如果您的功能必須支持表的列表是有限的,而不是太大,你可以嘗試使用了一系列簡單明瞭的IF &ELSEs。 – 2012-03-17 14:50:40