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

Tom*_*ski 34 t-sql sql-server stored-procedures

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

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

而这个存储过程对我来说对我来说没有用,所以我想把它暂存,以便当我结束执行查询时 - 它会消失.

Mar*_*ell 27

重新编辑 - 听起来你应该对nvarchar包含TSQL 的(参数化)使用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
Run Code Online (Sandbox Code Playgroud)

请注意,必须将表名和列名连接到查询中,但@Key可以参数化值(例如).


有一个临时存储过程 - 但它是每个连接,而不是每个sp.

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

也许如果你能澄清你想要什么?


小智 27

这个问题有点陈旧,但其他答案未能提供创建临时过程的语法.语法与临时表的语法相同:本地临时对象的#name,全局临时对象的##名称.

CREATE PROCEDURE #uspMyTempProcedure AS
BEGIN
  print 'This is a temporary procedure'
END
Run Code Online (Sandbox Code Playgroud)

这在官方文档的"过程名称"部分中进行了描述.http://technet.microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx

我正在使用这种技术为我的原始T-SQL单元测试重复删除代码.一个真正的单元测试框架会更好,但这比没有好,并且"垃圾收集"本身.

  • 功能怎么样?为了能够在SELECT COLUMN表达式中使用它们? (2认同)