Как запустить запрос из функции, когда имя таблицы передается в качестве аргумента - PullRequest
0 голосов
/ 16 марта 2012

Я пишу функцию, которая будет принимать имя таблицы в качестве аргумента. Я знаю имя нужного столбца из таблицы, но имя таблицы + владелец таблицы динамически передаются (ну, мне нужно, чтобы это было так, но в настоящее время оно не работает).

Это выглядит примерно так:

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 Только функции и некоторые расширенные хранимые процедуры могут быть выполнены из функции.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Вы можете создать хранимую процедуру со всеми вашими динамическими манипуляциями и использовать результат через выходной параметр.

1 голос
/ 16 марта 2012

Вы можете использовать CLR в SQL Server и использовать язык .NET, который будет запускать динамический sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...