我正在处理一个包含 24 列的表,这些列分别命名为 pp1、pp2...pp24。
我想传入一个参数,用于帮助识别要更新的列。
- 一个参数是值 (8)
- 一个参数是第 (5) 列
- 一个参数是 rowID (256)
短存储过程...
update 'pp'+ [column_parameter]
set value to [value_parameter]
where rowID = [rowID_parameter]
部分列名的拼接是否可以与参数组合?
我正在处理一个包含 24 列的表,这些列分别命名为 pp1、pp2...pp24。
我想传入一个参数,用于帮助识别要更新的列。
短存储过程...
update 'pp'+ [column_parameter]
set value to [value_parameter]
where rowID = [rowID_parameter]
部分列名的拼接是否可以与参数组合?
这真是个坏主意,我不明白你为什么需要这样做,而且它不能按照你正在寻找的方式完成,但如果你要这样做,我建议为声明 24 变量 + 1
RowID
.例如:
然后调用您的过程,并
NULL
为您不想更新的列传递 s。这是我能想到的唯一方法。示例演示
更新:
你甚至不需要 DynamicSQL,所以你
SP
可能看起来像这可以通过对其他列执行“无操作”更新来完成。
更新前:
更新后:
我所展示的内容与普通表和存储过程一样有效。如果列的数据类型不同,您可以将 @value 声明为sql_variant。
将列设置为其现有值不应以额外的写入结束。请参阅此处进行分析。
虽然这可能很有效,但整个过程中都有代码的味道。对列进行编号表明这些表未规范化。列应该有一个固定的用途,这样代码才能准确地知道在每种情况下引用哪一个。我猜应用程序允许运行时指定的字段,这就是实现?
因为我没有做表结构(遗留代码),所以我需要一个快速而肮脏的解决方案——所以我使用了动态 SQL。
谢谢大家的回答和评论。