SQL Server - 插入表 - 除1之外的所有列值相同

时间:2014-04-25 13:51:21

标签: sql sql-server sql-server-2008 tsql sql-insert

假设我的SQL Server 2008 DB中的表有以下insert语句:

INSERT INTO MyTable 
    ([Val1], [Val2], [Val3], [Val4])
VALUES
    ('val1', 'val2' 'val3', 'val4_a'),
    ('val1', 'val2' 'val3', 'val4_b'),
    ('val1', 'val2' 'val3', 'val4_c'),
    ('val1', 'val2' 'val3', 'val4_d');

换句话说,[Val1][Val3]的所有值都保持不变,但[Val4]会不断变化。

我正在考虑做一些事情:

Declare @Val1 varchar(10)
Declare @Val2 varchar(10)
Declare @Val3 varchar(10)   
Declare @Val4  ... some kind of list of varchar(10) ...

Set @Val1 = 'val1'
Set @Val2 = 'val2'
Set @Val3 = 'val3'
Set @Val4 = ('val4_a', 'val4_b', 'val4_c', 'val4_d')

然后通过@Val4进行某种循环,在这种情况下只写一个insert语句。这样可以非常方便地更改/更新,并使我的生活变得更加轻松!

我知道这不会奏效 - 我只是把它作为我希望完成的事情的一个例子 - 但是这样做的最佳方式是什么?

谢谢,我希望这个问题有道理!

2 个答案:

答案 0 :(得分:3)

如果您使用INSERT代替SELECT,则可以为VALUES撰写任意查询:

INSERT INTO MyTable 
    ([Val1], [Val2], [Val3], [Val4])
SELECT 'val1','val2','val3',v4.v
FROM (SELECT 'val4_a' union all
      SELECT 'val4_b' union all
      SELECT 'val4_c' union all
      SELECT 'val4_d') v4(v)

当然,如果您已经有table variable,说@v4包含每行所需的一行,那就更容易了:

INSERT INTO MyTable 
    ([Val1], [Val2], [Val3], [Val4])
SELECT 'val1','val2','val3',v4.v
FROM @v4 v4

然后,当然,它可以插入1行,4行,100000行,无论你放入@v4多少行。


因此,完整的脚本可能是:

DECLARE @v4 table (v varchar(10) not null)
INSERT INTO @v4(v) VALUES ('val4_a'),('val4_b'),('val4_c'),('val4_d')

INSERT INTO MyTable 
    ([Val1], [Val2], [Val3], [Val4])
SELECT 'val1','val2','val3',v4.v
FROM @v4 v4

答案 1 :(得分:1)

您可以在values语句中使用变量。所以:

INSERT INTO MyTable([Val1], [Val2], [Val3], [Val4])
VALUES
    (@val1, @val2, @val3, 'val4_a'),
    (@val1, @val2, @val3, 'val4_b'),
    (@val1, @val2, @val3, 'val4_c'),
    (@val1, @val2, @val3, 'val4_d');

这会实现你的目标吗?