我在t-sql中有一个表(T1),其中一列(C1)包含近30,000行数据。 每列包含MSA123,MSA245,MSA299等值。我需要运行更新脚本,以便字符串的MSA部分更改为CMA。我怎么能这样做?
答案 0 :(得分:3)
update t1
set c1 = replace(c1,"MSA","CMA")
where c1 like "MSA%"
答案 1 :(得分:2)
我面前没有SQL Server,但我相信这会有效:
UPDATE T1 SET C1 = REPLACE(C1, 'MSA', 'CMA');
答案 2 :(得分:1)
您可以使用REPLACE功能来执行此操作。
答案 3 :(得分:1)
除了lost888发布的内容之外,如果该表/列中还有其他值,您可以在where子句中使用LIKE运算符,以确保只更新您关注的记录:
... WHERE [C1] LIKE 'MSA[0-9][0-9][0-9]'
答案 4 :(得分:0)
虽然替换看起来会起作用,但当您需要将C替换为MS而不是MCA时,会发生什么?或者,如果您现在在数据中有MSAD和MSA,并且您不希望更改(或CMSA)。您是否确定您是否有任何您不想更换的数据?
正确的答案绝不是以这种方式存储数据。数据库设计的第一条规则是每个字段只存储一条信息。你应该有一个相关的表。随着时间的推移,维护起来会更容易。
答案 5 :(得分:0)
我不同意HLGEM的帖子。虽然第一个正规形式谈到EF Codd的原始视野中的原子力(是1NF IMHO中最具争议的方面),但原始请求并不一定意味着没有相关的表或者该值不是原子的。 / p>
MSA123可能是相关对象的自然键,公司可能只是决定重命名其产品系列。正确地说,如果使用人工ID,那么即使更新自然键也不需要更新那么多行,但如果这就是你所暗示的,那么我认为人工键绝对不是第一个规则。数据库设计。它们有它们的优点,但它们也有许多缺点,我不会在这里讨论,但有一点谷歌搜索会对是否使用人工主键产生相当大的争议。
至于原始请求,其他人已经钉了它,REPLACE是可行的方法。