如何更新表格中的不同列和行?我想做一些与replace a string in SQL server
类似的事情我想这样做,但该值存在于同一类型的多个列中。值是employee表的外键varchars。每列代表一个任务,因此可以将同一个员工分配给记录中的多个任务,这些任务将在不同记录之间变化。我怎样才能有效地做到这一点?在整个表格中,基本上可以替换所有不同的列。
感谢您提供任何帮助或建议。
干杯, 〜在圣地亚哥
答案 0 :(得分:10)
这应该可以解决问题:
UPDATE table1
SET field1 = replace(field1, 'oldstring', 'newstring'),
field2 = replace(field2, 'oldstring2', 'newstring2')
等...
答案 1 :(得分:3)
答案 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>