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

时间:2011-05-01 22:52:34

标签: sql sql-server tsql

我有一个表,我想更新一对多关系记录。表格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'的记录。 除了单独插​​入语句之外,我该如何实现呢?

4 个答案:

答案 0 :(得分:2)

如果您使用的是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/

答案 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

你能做的是:

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

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

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

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

    insert into CT_ProductFaiures (Old_Modes, New_Modes)
    values 
    
  4. 所以在结果中你有这个

    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命令中使用此表。