【发布时间】:2018-04-27 01:21:47
【问题描述】:
这似乎没有在任何地方得到回答(尽管已经回答了非常相似的案例)......
我遇到了一个问题,我试图在存储过程中更新表中的列值。但是,我将多个表传递给此存储过程,并且某些表具有特定列,而其他表则没有。因此,我需要在运行此更新之前检查该列是否存在。现在,因为它在存储过程中,SQL 似乎在解析整个代码块并抱怨该列不存在。
代码:
IF COL_LENGTH(''DBName' + @date+ '..' + @TableName + @date+''', ''ColumnName' + @specifictocolumn + 'restofcolumnname'') IS NOT NULL
update DBName' + @date+ '..' + @TableName + @date+ ' set ColumnName' + @specifictocolumn + 'restofcolumnname = 0
或者
IF EXISTS(SELECT 1 FROM sys.columns WHERE Name = N''ColumnName' + @specifictocolumn + 'restofcolumnname '' AND Object_ID = Object_ID(N''DBName' + @date+ '..' + @TableName + @date+'''))
update DBName' + @date+ '..' + @TableName + @date+ ' set ColumnName' + @specifictocolumn + 'restofcolumnname = 0
这两个都给出了错误(出于 IP 目的删除了列名):
消息 207,第 16 级,状态 1,第 6 行 列名“ColumnName”无效。
我查看了一个名为“禁用 TSQL 脚本检查”的堆栈溢出问题,但他们建议您在动态 sql 之外调用列的检查,然后仅在通过检查时执行。这对我不起作用,因为部分 if 语句中包含需要在动态 sql 中的变量。
【问题讨论】:
标签: mysql sql sql-server stored-procedures