假设我的SQL Server 2008 DB中的表具有以下插入语句:
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');
换句话说,for的所有值[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语句进行某种循环。这使得更改/更新变得非常容易,并使我的生活变得更加轻松!!
我知道这行不通-我只是将其作为我希望完成的事的一个例子-但是做这种事情的最佳方法是什么?
谢谢,我希望这个问题有道理!
你可以写任意查询你的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变量,比如说@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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句