在 MS SQL 2005 上是否有创建临时存储过程或函数的机会?我想仅在我的查询中使用此存储过程,因此在执行后它将消失。
我有一个查询,我想对一些数据执行EXEC。但是对于我将处理此命令的每个表,我都需要更改其中的某些部分。因此,我想创建临时SP,它将从我提供的参数(如表名等)返回查询,然后通过EXEC执行此查询。
并且这个存储过程以后对我来说没有用,所以我希望它是临时的,这样当我结束执行我的查询时 - 它将消失。
在 MS SQL 2005 上是否有创建临时存储过程或函数的机会?我想仅在我的查询中使用此存储过程,因此在执行后它将消失。
我有一个查询,我想对一些数据执行EXEC。但是对于我将处理此命令的每个表,我都需要更改其中的某些部分。因此,我想创建临时SP,它将从我提供的参数(如表名等)返回查询,然后通过EXEC执行此查询。
并且这个存储过程以后对我来说没有用,所以我希望它是临时的,这样当我结束执行我的查询时 - 它将消失。
这个问题有点老,但其他答案未能提供创建临时过程的语法。语法与创建临时表相同:使用 #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 关于您的编辑 - 您似乎应该使用 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
)可以作为参数化。
有一个临时存储过程 - 但它是每个连接而不是每个存储过程的。
但是,您可能要查看公共表达式 - 它们可能是您想要的(尽管您只能从中读取一次)。
也许如果您能澄清您想要做什么?
只需在查询中使用存储过程的SQL即可。无需在数据库内创建存储过程,这不会比在查询内使用普通查询提供任何优势。