是否有机会在MS SQL 2005上创建临时存储过程或函数?我想仅在我的查询中使用此存储过程,因此在执行后它将消失。
我有一个查询我想针对某些数据执行EXEC。但是对于我将处理此命令的每个表,我需要更改它的某些部分。所以我想我会创建一个临时SP,它将从我提供的参数(如表名等)返回给我一个查询,而不是由EXEC执行此查询。
这个存储过程对我来说对我没用,所以我想把它暂存一下,这样当我结束执行查询时 - 它就会消失。
答案 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。无需在数据库中创建存储过程,它不会比查询中的普通查询更有优势。