如何更新隔着一张桌子不同的行和列? 我想要做类似的东西来代替SQL Server中的字符串
我想这样做,但在相同类型的多个列中存在的价值。 该值是外键VARCHAR处理给员工表。 每一列代表一个任务,所以同样的雇员可以在记录被分配到几个任务和这些任务将记录之间变化。 我怎样才能做到这一点有效? 基本上的东西全部更换翻过整个表格不同列。
感谢您的任何帮助或建议。
欢呼声中,在〜圣地亚哥CK
如何更新隔着一张桌子不同的行和列? 我想要做类似的东西来代替SQL Server中的字符串
我想这样做,但在相同类型的多个列中存在的价值。 该值是外键VARCHAR处理给员工表。 每一列代表一个任务,所以同样的雇员可以在记录被分配到几个任务和这些任务将记录之间变化。 我怎样才能做到这一点有效? 基本上的东西全部更换翻过整个表格不同列。
感谢您的任何帮助或建议。
欢呼声中,在〜圣地亚哥CK
这应该做的伎俩:
UPDATE table1
SET field1 = replace(field1, 'oldstring', 'newstring'),
field2 = replace(field2, 'oldstring2', 'newstring2')
等等...
对于SQL Server 2005这应该做的伎俩:
http://www.mssqltips.com/tip.asp?tip=1555
允许搜索和跨所有表所有列替换。 请务必阅读文章虽然。
主要的想法是创建一个SQL更新一句话,不管许多领域有着怎样的表。 它的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执行。 这段代码写入更新句话时节省您的时间。
希望能帮助到你。
在回答海报的有关如何规范这个数据结构质询。 这里是你会怎么做:
Project
-------
ProjectID
ProjectName
etc...
Employee
--------
EmployeeID
EmployeeName
etc...
Task
----
TaskID
ProjectID
EmployeeID
TaskDescription
etc...
您当前的结构,在这里你有一大堆的任务1,任务2,等等......在项目表中的列,显然没有人能理解的关系数据库设计。
在烧制过程中,个别的过程中,你也可以说是他的设计违反了第一范式 ,而联一节指挥他的“重复组跨列”。