2012-08-14 74 views
2

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

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

然而,当我移动这条线BEGIN ... END块内,它会除非我使用EXEC抛出synatx错误或EXECUTE命令:

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 

任何原因?

+0

我想你只需要一个exec语句,如果语句是批处理中的第一个语句...例如... GO SP_REName ...;当它在循环中时,它不是第一个语句,因此必须执行 – 2012-08-14 22:34:37

回答

8

MSDN's EXECUTE Article

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

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