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 キーワードを指定する必要はありません。

したがって、2 番目の例では、ストアド プロシージャの呼び出しがバッチ内の最初のステートメントではないため、エラーがスローされます。

于 2012-08-14T22:51:26.390 に答える