【问题标题】:How to execute a stored procedure after it is created?存储过程创建后如何执行?
【发布时间】:2013-08-07 07:23:00
【问题描述】:

我试图在创建存储过程后直接执行它,但是它没有被调用。在执行调用期间似乎尚未创建存储过程。

脚本如下所示:

CREATE PROCEDURE sp_Transfer_RegionData
AS
BEGIN
    INSERT INTO Region (regionName)
    SELECT column1
    FROM openquery(ITDB, 'select * from db.table1')
END

EXEC sp_Transfer_RegionData

脚本运行良好,但未填充所需的表。将执行部分替换为:

IF OBJECT_ID('sp_Transfer_RegionData') IS NOT NULL
begin

exec [dbo].[sp_Transfer_RegionData]
print 'tada'
end

我可以看到存储过程在必须执行时不存在。在互联网上找不到解决方案...

那么如何让SQL脚本同步运行,使得存储过程在执行部分就已经存在呢?

【问题讨论】:

  • 拜托,你能告诉我创建过程后有什么消息吗?
  • 您需要GO 还是COMMIT
  • @vikramjain 没有发生错误。我成功完成了一个命令。
  • CREATE PROCEDURE: "在命名过程时避免使用 sp_ 前缀。SQL Server 使用此前缀来指定系统过程。"

标签: sql sql-server tsql stored-procedures


【解决方案1】:

在创建 SP 后您需要一个 GO,否则您创建了一个递归 SP,它“无限期地”调用自己,这在 SQL Server 中是 32 次。

最大存储过程、函数、触发器或视图嵌套级别 超过(限制 32)。

试试这个:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO            

CREATE PROCEDURE sp_Transfer_RegionData
AS
BEGIN
    INSERT INTO Region (regionName)
    SELECT column1
    FROM openquery(ITDB, 'select * from db.table1')

END

GO

EXEC sp_Transfer_RegionData

【讨论】:

  • tnks GO 完成了这项工作!
猜你喜欢
  • 2021-09-16
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多