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

Cof*_*ode 3 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

该脚本运行正常,但未填充所需的表.用以下内容替换执行部分后:

IF OBJECT_ID('sp_Transfer_RegionData') IS NOT NULL
begin

exec [dbo].[sp_Transfer_RegionData]
print 'tada'
end
Run Code Online (Sandbox Code Playgroud)

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

那么如何让SQL脚本运行同步,以便在执行部分期间存储过程已经存在?

Mik*_*son 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
Run Code Online (Sandbox Code Playgroud)