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单元测试重复删除代码.一个真正的单元测试框架会更好,但这比没有好,并且"垃圾收集"本身.