2012-08-14 70 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關鍵字。

因此,第二個示例將引發錯誤,因爲存儲過程調用不是批處理中的第一條語句。