2009-04-10 81 views
34

是否有机会在MS SQL 2005上创建临时存储过程或函数?我想只在我的查询中使用这个存储过程,所以执行后它将不见了。T-SQL中的临时函数或存储过程

我有一个查询,我想EXEC对一些数据。但是对于每个表我都会处理这个命令,我需要改变它的一些部分。所以我想我会创建一个临时SP,它会为我提供一个来自我提供的参数(如表名等)的查询,然后由EXEC执行这个查询。

而这个存储过程对我以后将不会有用,所以我想暂时让它有用,这样当我结束执行我的查询时它就会消失。

+1

编辑答案您的评论 – 2009-04-10 10:31:24

回答

27

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

在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。

但是,您可能需要查看公共表格表达式 - 它们可能是您以后的内容(尽管您只能从中读取一次)。

也许如果你可以澄清你想要什么

+0

你能澄清“临时存储过程”位吗?你的意思是sp_prepare或sp_executesql? – gbn 2009-04-10 08:25:50

+1

我已经添加了一些关于我尝试实现的更多内容。希望它有助于理解我的想法。 – 2009-04-10 08:51:24

-3

只需在查询中使用存储过程的SQL。无需在数据库中创建存储过程,它不会为您的查询中的普通查询带来任何优势。

+14

但这不允许重用存储的proc代码 - 我认为这是一种有益于此方法。 – Tone 2011-06-24 14:40:11

26

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

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单元测试重复数据删除代码。一个真正的单元测试框架会更好,但这比没有好,“垃圾收集”好。