繁体   English   中英

如何使用 T-SQL 中的值列表更新表?

[英]How to update a table with list of values in T-SQL?

我有一个要更新一对多关系记录的表。 表定义为:

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' 的记录。 除了通过单独的插入语句之外,我怎样才能做到这一点?

如果您使用的是 SQL Server 2008,您可以使用如下语法轻松完成此操作

INSERT INTO CT_ProductFaiures (Old_Modes, New_Modes)
VALUES ('N1', 'A'), ('N1', 'B'), ('N1', 'C');

这假设 PFID 是自动递增的。

您可以在旧版本中使用 UNIONS 来实现这一点。 查看下面的链接以获取很好的示例。

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/

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

或者,使用换行符作为分隔符编写一个拆分 function

INSERT INTO CT_ProductFailures (New_Modes, Old_Modes)
SELECT 'N1' New_Modes, o.value Old_Modes
FROM dbo.split(
'A
B
C') o

瑞安,

你是说:'相反,我想复制这个列表,这样我所要做的就是在每条记录周围添加单引号'。
目前尚不清楚您的列表是如何形成的。

假设您有这样的列表(逗号分隔值)

N1, A
N1, B
N1, C

你可以做的是:

  1. 将列表复制/粘贴到 SQL Server Management Studio
  2. 使用正则表达式运行一些替换:

    • 点击 Ctrl+H 打开“查找和替换”对话框
    • 在查找选项 select 使用“正则表达式”
    • 查找内容:[^] 替换为:[('] 点击“全部替换”
      不要输入方括号。我用它们来确保你能看到空格!
    • 查找内容:[$] 替换为:['),] 点击“全部替换”
    • 查找内容:[, ] 替换为:[', '] 点击“全部替换”
    • 删除最后一个多余的逗号

    你最终会得到这样的列表:

     ('N1', 'A'), ('N1', 'B'), ('N1', 'C')
  3. 然后在脚本顶部添加插入语句:

     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', '] 即可,无需任何正则表达式。
此外,手动修复开始和结束值。

使用 AB C 记录和另一个 New_Modes 字段创建一个名为 NewTable 的表。

在您的插入命令中使用此表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM