Подтвердить что ты не робот

Временная функция или хранимая процедура в T-SQL

Есть ли вероятность создать временную хранимую процедуру или функцию на MS SQL 2005? Я хотел бы использовать эту хранимую процедуру только в моем запросе, поэтому после ее выполнения она не будет.

У меня есть запрос, который я бы хотел использовать EXEC для некоторых данных. Но для каждой таблицы я буду обрабатывать эту команду, мне нужно изменить некоторые ее части. Поэтому я думал, что создам временный SP, который вернет мне запрос из аргументов, которые я предоставляю (например, имя таблицы и т.д.), И выполнить этот запрос с помощью EXEC.

И эта хранимая процедура будет полезна для меня позже, поэтому я хотел бы, чтобы она была временной, так что, когда я заканчиваю выполнение моего запроса, он исчезнет.

4b9b3361

Ответ 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 хранимой процедуры внутри вашего запроса. Нет необходимости создавать хранимую процедуру внутри БД, это не даст вам никаких преимуществ перед обычным запросом внутри вашего запроса.