假设我的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语句。这样可以非常方便地更改/更新,并使我的生活变得更加轻松!
我知道这不会奏效 - 我只是把它作为我希望完成的事情的一个例子 - 但是这样做的最佳方式是什么?
谢谢,我希望这个问题有道理!
答案 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');
这会实现你的目标吗?