TSQL:在BEGIN ... END块内执行存储过程

Dom*_*nic 2 sql t-sql

在BEGIN ... END块之外调用存储过程时,我不需要使用EXEC或EXECUTE命令; 以下作品:

SP_RENAME '[dbo].[TableName].[old_column]', 'new_column', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)

但是,当我在BEGIN ... END块内移动此行时,除非我使用EXEC或EXECUTE命令,否则它将抛出一个synatx错误:

IF EXISTS(SELECT * FROM sys.columns WHERE Name = N'old_column' AND Object_ID = Object_ID(N'TableName'))
BEGIN
    EXEC SP_RENAME '[dbo].[TableName].[old_column]', 'new_column', 'COLUMN'
END
Run Code Online (Sandbox Code Playgroud)

有什么理由吗?

Mic*_*son 8

来自MSDN的EXECUTE文章:

如果语句是批处理中的第一个语句,则在执行存储过程时不必指定EXECUTE关键字.

因此,您的第二个示例抛出错误,因为存储过程调用不是批处理中的第一个语句.