Eng | Rus
 
Обучение -> Решения -> Передача имени таблицы
 
 
 
Simple Seo Solutions
SEO и Продвижение
сайтов
Speechpad.ru
Голосовой набор текстаГолосовой набор текста

Передача имени таблицы как параметр подставляемой функции на sql сервере

(эмуляция динамического sql)

Простым способом это сделать нельзя:
CREATE FUNCTION dbo.wrong_function (@par1 varchar(80))
RETURNS TABLE AS RETURN (SELECT * FROM @par1 )

Но можно эмулировать передачу имени таблицы в подставляемую функцию следующим образом:

CREATE FUNCTION dbo.EmulationOfTheTables
(@par1 smallint)
RETURNS @table_variable TABLE
(firstcolumn sometype,
secondcolumn anothertype)
AS
BEGIN
if @par1=1
begin
INSERT INTO @table_variable
SELECT somefield,anotherfield FROM firstTable
end
else
begin
INSERT INTO @table_variable
somefield,anotherfield FROM secondTable
end
RETURN
END
CREATE FUNCTION dbo.good_function (@par1 smallint)
RETURNS TABLE AS RETURN (SELECT * FROM EmulationOfTheTables(@par1) )
 

Еще один способ эмулирования динамического sql в подставляемых функциях - использование оператора CASE:

CREATE FUNCTION dbo.usingcase
(@par1 smallint )
RETURNS TABLE
AS
RETURN (
SELECT CASE @par1
WHEN 1 THEN first
WHEN 2 THEN second
END as chosenfield
FROM sometable_or_function )

Комбинируя оба этих способа можно эмулировать сложные динамические запросы на sql сервере.

© prjsoft.ru