3

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

脚本如下所示:

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 脚本同步运行,以使存储过程在执行部分就已经存在呢?

4

1 回答 1

7

在创建 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
于 2013-08-07T07:26:25.473 回答