如何通过批量更新来更改字符串数据?

时间:2008-12-29 16:06:23

标签: sql-server-2005 tsql

我在t-sql中有一个表(T1),其中一列(C1)包含近30,000行数据。 每列包含MSA123,MSA245,MSA299等值。我需要运行更新脚本,以便字符串的MSA部分更改为CMA。我怎么能这样做?

6 个答案:

答案 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是可行的方法。