T-SQL中的临时函数或存储过程

时间:2009-04-10 08:01:36

标签: sql-server tsql stored-procedures

是否有机会在MS SQL 2005上创建临时存储过程或函数?我想仅在我的查询中使用此存储过程,因此在执行后它将消失。

我有一个查询我想针对某些数据执行EXEC。但是对于我将处理此命令的每个表,我需要更改它的某些部分。所以我想我会创建一个临时SP,它将从我提供的参数(如表名等)返回给我一个查询,而不是由EXEC执行此查询。

这个存储过程对我来说对我没用,所以我想把它暂存一下,这样当我结束执行查询时 - 它就会消失。

3 个答案:

答案 0 :(得分:27)

重新编辑 - 听起来你应该对包含TSQL的(参数化)nvarchar使用sp_ExecuteSQL。

搜索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。

但是,您可能希望查看公用表格 - 它们可能就是您所追求的(尽管您只能读取它们一次)。

也许你可以澄清你想要做什么

答案 1 :(得分:27)

这个问题有点陈旧,但其他答案未能提供创建临时过程的语法。语法与临时表的语法相同:#name表示本地临时对象,## 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单元测试的代码进行重复数据删除。一个真正的单元测试框架会更好,但这比没有好,并且“垃圾收集”自己。

答案 2 :(得分:-3)

只需在查询中使用存储过程的SQL。无需在数据库中创建存储过程,它不会比查询中的普通查询更有优势。