Можно ли передать имя таблицы в хранимый процесс и использовать его без функции Exec? - PullRequest
2 голосов
/ 22 октября 2009

Я хотел бы создать SP или UDF, где я предоставляю имя таблицы и столбца в качестве параметра, и он что-то делает для этой цели. Я использую Sql Server 2005

Trivial Пример того, что я пытаюсь выполнить:

CREATE FUNCTION Example (@TableName AS VARCHAR(100))
RETURNS TABLE
AS
BEGIN
    SELECT * 
    INTO #temp
    FROM @TableName

    RETURN #temp
END

Этот пример является просто тривиальным, чтобы проиллюстрировать то, что я пытаюсь выполнить с точки зрения передачи имени таблицы в качестве параметра.

Возможно ли это сделать без объединения строк и вызова функции EXEC?

В конечном счете, я пытаюсь преобразовать ответ из этого вопроса во что-то повторно используемое.

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Это пахнет SQL-инъекцией. Вам все равно нужно будет использовать EXEC для этого.

2 голосов
/ 22 октября 2009

Нет. Не могу этого сделать. К сожалению, в T-SQL нет макрокомандировщика. Самое близкое, что вы получите, это режим SQLCMD, но он предназначен только для сценариев, его нельзя использовать в определениях объектов.

Вы делаете одно и то же для стола каждый раз?

Вы можете динамически переопределить синоним, но для этого все еще требуется EXEC, и вы теряете параллелизм. Вы можете сериализовать выполнение с помощью очереди, но в этот момент вам может быть лучше с простым старым динамическим SQL.

Вы можете попробовать временные таблицы, не переданные как переменные, но созданные в родительском соединении или вызывающей процедуре. например.

create proc #proc as
select * from #table
go

create table #table (col1 int)
insert #table values (1)
insert #table values (2)
insert #table values (3)
go

exec #proc
go

Дополнительные способы обмена данными между хранимыми процедурами см. Здесь: http://www.sommarskog.se/share_data.html

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