2

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

SP_RENAME '[dbo].[TableName].[old_column]', 'new_column', 'COLUMN'

但是,当我在 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

有什么理由吗?

4

1 回答 1

8

来自MSDN 的EXECUTE文章

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

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

于 2012-08-14T22:51:26.390 回答