【问题标题】:Temporary function or stored procedure in T-SQLT-SQL 中的临时函数或存储过程
【发布时间】:2009-04-10 08:01:36
【问题描述】:

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

我有一个查询,我想对一些数据执行 EXEC。但是对于我将处理此命令的每个表,我需要更改它的某些部分。所以我想我会创建一个临时 SP,它会根据我提供的参数(如表名等)为我返回一个查询,然后通过 EXEC 执行这个查询。

这个存储过程以后对我没有用,所以我希望它是临时的,这样当我结束执行查询时它会消失。

【问题讨论】:

  • 编辑回答您的评论

标签: sql-server tsql stored-procedures


【解决方案1】:

这个问题有点老了,但其他答案未能提供创建临时过程的语法。语法与临时表相同:#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 单元测试的代码进行重复数据删除。一个真正的单元测试框架会更好,但这总比没有好,然后“垃圾收集”。

【讨论】:

  • 函数呢?为了能够在 SELECT COLUMN 表达式中使用它们?
【解决方案2】:

重新编辑 - 听起来您应该针对包含 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。

但是,您可能想查看 Common Table Expressions - 它们可能就是您所追求的(尽管您只能从中读取一次)。

也许你能澄清一下你想做什么

【讨论】:

  • 你能澄清一下“临时存储过程”吗?你是说 sp_prepare 还是 sp_executesql?
  • 我添加了一些关于我尝试完成的内容的更多解释。希望它有助于理解我的想法。
【解决方案3】:

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

【讨论】:

  • 但这不允许重用存储的过程代码 - 我认为这是这种方法的一个好处。
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 2013-05-28
  • 2020-07-09
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2011-08-03
相关资源
最近更新 更多