Я пишу функцию, которая будет принимать имя таблицы в качестве аргумента.
Я знаю имя нужного столбца из таблицы, но имя таблицы + владелец таблицы динамически передаются (ну, мне нужно, чтобы это было так, но в настоящее время оно не работает).
Это выглядит примерно так:
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 calendar_year=@current_year and country_code = @country_code)
...
END
Я не могу поставить @table_name вместо '???'
Это дало мне ошибку:
Сообщение 1087, Уровень 16, Состояние 1, Процедура alex_business_date_diff, Линия
53 Необходимо объявить табличную переменную "@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
Но получите эту ошибку (когда я пытаюсь запустить функцию):
Сообщение 557, Уровень 16, Состояние 2, Строка 1 Только функции и некоторые расширенные
хранимые процедуры могут быть выполнены из функции.