Временная функция или хранимая процедура в T-SQL
Есть ли вероятность создать временную хранимую процедуру или функцию на MS SQL 2005? Я хотел бы использовать эту хранимую процедуру только в моем запросе, поэтому после ее выполнения она не будет.
У меня есть запрос, который я бы хотел использовать EXEC для некоторых данных. Но для каждой таблицы я буду обрабатывать эту команду, мне нужно изменить некоторые ее части. Поэтому я думал, что создам временный SP, который вернет мне запрос из аргументов, которые я предоставляю (например, имя таблицы и т.д.), И выполнить этот запрос с помощью EXEC.
И эта хранимая процедура будет полезна для меня позже, поэтому я хотел бы, чтобы она была временной, так что, когда я заканчиваю выполнение моего запроса, он исчезнет.
Ответы
Ответ 1
Повторите свое редактирование - похоже, что вы должны использовать sp_ExecuteSQL для (параметризованного) nvarchar
, который содержит TSQL.
Поиск по sp_ExecuteSQL; простой пример:
DECLARE @SQL nvarchar(4000),
@Table varchar(20) = 'ORDERS',
@IDColumn varchar(20) = 'OrderID',
@ID int = 10248
SET @SQL = 'SELECT * FROM [' + @Table + '] WHERE ['
+ @IDColumn + '] = @Key'
EXEC sp_executesql @SQL, N'@Key int', @ID
Обратите внимание, что имена таблиц и столбцов должны быть объединены в запрос, но значения (например, @Key
) могут быть параметризованы.
Существует временная хранимая процедура - но это за соединение, а не за sp.
Однако вы можете захотеть взглянуть на общие выражения таблицы - они могут быть такими, какие вы есть (хотя вы можете читать их только один раз).
Может быть, если вы сможете уточнить, что вы пытаетесь сделать?
Ответ 2
Этот вопрос немного устарел, но другие ответы не предоставили синтаксис для создания временных процедур. Синтаксис такой же, как для временных таблиц: # имя для локальных временных объектов, ## name для глобальных временных объектов.
CREATE PROCEDURE #uspMyTempProcedure AS
BEGIN
print 'This is a temporary procedure'
END
Это описано в разделе "Название процедуры" официальной документации. http://technet.microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx
Я использую этот метод для дедупликации кода для моих примитивных модульных тестов T-SQL. Реальная модульная система тестирования будет лучше, но это лучше, чем ничего, и "сбор мусора" после себя.
Ответ 3
Просто используйте SQL хранимой процедуры внутри вашего запроса. Нет необходимости создавать хранимую процедуру внутри БД, это не даст вам никаких преимуществ перед обычным запросом внутри вашего запроса.