sql - TSQL:在 BEGIN...END block 中执行存储过程

标签 sql tsql

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

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

但是,当我将这一行移动到 BEGIN...END block 内时,它将抛出一个语法错误,除非我使用 EXEC 或 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

有什么原因吗?

最佳答案

来自 MSDN's EXECUTE Article :

You do not have to specify the EXECUTE keyword when executing stored procedures if the statement is the first one in a batch.

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

关于sql - TSQL:在 BEGIN...END block 中执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961583/

相关文章:

mysql - SQL查询建议请

sql - 解析字符串 SQL

sql - 在 IF .. ELSE 语句中使用临时表

sql - 获取SQL中WHERE条件的最后一条记录

java - 如何在HQL中选择group by LEFT(t.field, 6)?

mysql - 执行内部连接时 mysql 的语法错误

MYSQL按 "gaps"填充组

sql-server - 为什么多个 WHERE 条件会减慢查询而不是加快查询速度?

sql - 两列数据的所有可能组合

MySQL:返回具有相同ID但按不同字段过滤的所有行