如何在创建存储过程后执行它?

时间:2013-08-07 07:23:01

标签: sql sql-server tsql stored-procedures

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

以下是脚本的外观:

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

1 个答案:

答案 0 :(得分: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