如何使用Replace in SQL server更新多个列?

时间:2009-07-23 01:08:21

标签: sql sql-server sql-update dynamic-sql

如何更新表格中的不同列和行?我想做一些与replace a string in SQL server

类似的事情

我想这样做,但该值存在于同一类型的多个列中。值是employee表的外键varchars。每列代表一个任务,因此可以将同一个员工分配给记录中的多个任务,这些任务将在不同记录之间变化。我怎样才能有效地做到这一点?在整个表格中,基本上可以替换所有不同的列。

感谢您提供任何帮助或建议。

干杯, 〜在圣地亚哥

4 个答案:

答案 0 :(得分:10)

这应该可以解决问题:

UPDATE table1
SET field1 = replace(field1, 'oldstring', 'newstring'),
    field2 = replace(field2, 'oldstring2', 'newstring2')

等...

答案 1 :(得分:3)

对于SQL Server 2005,这应该可以解决问题:

http://www.mssqltips.com/tip.asp?tip=1555

允许搜索和替换所有表中的所有列。请务必阅读该文章。

答案 2 :(得分:2)

主要思想是创建一个SQL Update语句,无论表中有多少个字段。它是在SQL Server 2012上创建的,但我认为它也适用于2008年。

样本表:

CREATE TABLE SampleTable
(
    Field1 INT,
    Field2 VARCHAR(20),
    Field3 VARCHAR(20),
    Field4 VARCHAR(100),
    Field5 DATETIME,
    Field6 NVARCHAR(10)
);

仅获取varchar和nvarchar字段。根据您的要求更改 OLD_TEXT NEW_TEXT 。如果您不仅需要匹配varchar和nvarchar字段,请更改 system_type_id 值。

SELECT 'UPDATE dbo.SampleTable SET ' + STUFF((SELECT ', [' + name + '] =   REPLACE([' + name + '], ''OLD_TEXT'', ''NEW_TEXT'')' 
FROM sys.COLUMNS
WHERE 
    [OBJECT_ID] = OBJECT_ID('SampleTable')
    AND [is_identity] = 0 --It's not identity field
    AND [system_type_id] in (167, 231) -- varchar, nvarchar
FOR XML PATH('')), 1,1, '')

上一次查询的结果是:

UPDATE dbo.SampleTable SET  
    [Field2] = REPLACE([Field2], 'OLD_TEXT', 'NEW_TEXT'), 
    [Field3] = REPLACE([Field3], 'OLD_TEXT', 'NEW_TEXT'), 
    [Field4] = REPLACE([Field4], 'OLD_TEXT', 'NEW_TEXT'), 
    [Field6] = REPLACE([Field6], 'OLD_TEXT', 'NEW_TEXT');

只需复制结果并在SSMS中执行即可。在编写更新语句时,此片段可为您节省一些时间。

希望它有所帮助。

答案 3 :(得分:0)

回答海报关于如何规范化这种数据结构的补充问题。这是你如何做到的:

Project
-------
ProjectID
ProjectName
etc...

Employee
--------
EmployeeID
EmployeeName
etc...

Task
----
TaskID
ProjectID
EmployeeID
TaskDescription
etc...

你目前的结构,你在项目表中有一堆Task1,Task2等......列显然不是由理解关系数据库的人设计的。

在解雇该个人的过程中,您可以解释他的设计违反了First Normal Form,同时将他引导到该链接文章的“跨列重复组”部分。 / p>