我有一个表,我想更新一对多关系记录。表格def是:
CREATE TABLE CT_ProductFailures
(
PFID int identity(1,1) PRIMARY KEY NOT NULL,
Old_Modes varchar(75),
New_Modes varchar(75)
)
现在我想用Old_Modes'A','B','C'添加New_Mode'N1'的记录。 除了单独插入语句之外,我该如何实现呢?
答案 0 :(得分:2)
如果您使用的是SQL Server 2008,则可以使用下面的语法轻松完成此操作
INSERT INTO CT_ProductFaiures (Old_Modes, New_Modes)
VALUES ('N1', 'A'), ('N1', 'B'), ('N1', 'C');
这假设PFID是自动递增的。
您可以使用UNIONS在旧版本中实现此目的。请查看以下链接以获取很好的示例。
答案 1 :(得分:1)
INSERT INTO CT_ProductFailures (New_Modes, Old_Modes)
SELECT n.New_Modes, o.Old_Modes
FROM (SELECT 'N1' New_Modes) n
CROSS JOIN (SELECT 'A' Old_Modes
UNION ALL SELECT 'B'
UNION ALL SELECT 'C') o
或者,使用换行符作为分隔符编写split function:
INSERT INTO CT_ProductFailures (New_Modes, Old_Modes)
SELECT 'N1' New_Modes, o.value Old_Modes
FROM dbo.split(
'A
B
C') o
答案 2 :(得分:1)
瑞恩
你说:'相反,我想要复制这个列表,这样我所要做的就是在每条记录周围添加单引号'。
目前尚不清楚你的名单是如何形成的。
假设你有这样的列表(逗号分隔值)
N1, A
N1, B
N1, C
你能做的是:
使用正则表达式运行一些替换:
你最终会得到这样的列表:
('N1', 'A'),
('N1', 'B'),
('N1', 'C')
然后在脚本顶部添加insert语句:
insert into CT_ProductFaiures (Old_Modes, New_Modes)
values
所以在结果中你有这个
insert into CT_ProductFaiures (Old_Modes, New_Modes)
values
('N1', 'A'),
('N1', 'B'),
('N1', 'C')
希望这就是你所需要的。
将帖子
对不起,没注意
所以列表的格式如下:A,B,C,D
然后你只需用['),('N1',']替换[,]而不用任何正则表达式
另外,手动修复起始值和结束值。
答案 3 :(得分:0)
使用带有另一个New_Modes字段的A B C记录创建一个名为NewTable的表。
在insert命令中使用此表。