Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-插入到表中-除1外,所有列值均相同_Sql_Sql Server_Sql Server 2008_Tsql_Sql Insert - Fatal编程技术网

SQL Server-插入到表中-除1外,所有列值均相同

SQL Server-插入到表中-除1外,所有列值均相同,sql,sql-server,sql-server-2008,tsql,sql-insert,Sql,Sql Server,Sql Server 2008,Tsql,Sql Insert,假设我的SQL Server 2008数据库中的表有以下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', 'v

假设我的SQL Server 2008数据库中的表有以下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语句。这允许非常容易的更改/更新,并将使我的生活更加轻松

我知道这是行不通的——我只是把它作为我希望实现的一个例子——但做这样一件事的最佳方式是什么


谢谢,我希望这个问题有意义

您可以在
语句中使用变量。因此:

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');

这是否实现了您的目标?

您可以在
语句中使用变量。因此:

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');

这是否实现了您的目标?

如果使用
选择
而不是
值,您可以为
插入
编写任意查询:

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)
当然,如果您已经有了一个,比如说
@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

如果使用
选择
而不是
值,则可以为
插入
编写任意查询:

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)
当然,如果您已经有了一个,比如说
@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

@Val4的值从何而来?它是一个序列,还是从客户端传递到过程中的某个东西?我会自己键入它们。。。假设我必须为几个汽车制造商更新这个数据库,我必须选择哪个制造商来做它。。。有时可能只有2个,比如
('Ford','BMW')
,其他时候可能是10个。。。它会根据客户的要求而变化。那么Gordon的回答应该很好。@dean,请看我对他的回答。。。这意味着注释掉一些更新语句/添加新语句,因为
@Val4
中的值的数量发生了变化……@Val4的值从何而来?它是一个序列,还是从客户端传递到过程中的某个东西?我会自己键入它们。。。想象一下,我必须为几个汽车制造商更新这个数据库,我必须选择为哪个制造商更新这个数据库。。。有时可能只有2个,比如
('Ford','BMW')
,其他时候可能是10个。。。它会根据客户的要求而变化。那么Gordon的回答应该很好。@dean,请看我对他的回答。。。这意味着注释掉一些更新语句/添加新语句,因为
@Val4
中的值的数量发生了变化…谢谢,戈登,我知道我可以使用它们,但我希望,例如,将
@Val4
列成一个列表,然后根本不必更改更新语句。。。。这有意义吗?有点像在
@Val4
中循环所有值……谢谢,戈登,我知道我可以使用它们,但我希望,例如,将
@Val4
列为一个列表,然后根本不必更改update语句。。。。这有意义吗?有点像是在
@Val4
中循环所有值……谢谢,达米恩,但挑战是,这仍然需要做很多更改,而不仅仅是创建一个列表并以某种方式循环它。。。我不知道这是否可能,不过。。。但是你能想象一下,如果一次
@val4
包含3个值,而下一次包含10个值,这会有多困难吗?我刚刚做了!!-感谢Damien的更新,你能帮我介绍一下创建
@v4
的最佳语法吗?这样它会很灵活??谢谢,Damien,但挑战是,这仍然需要做很多更改,而不仅仅是创建一个列表并以某种方式循环它。。。我不知道这是否可能,不过。。。但是你能想象一下,如果一次
@val4
包含3个值,而下一次包含10个值,这会有多困难吗?我刚刚做了!!-感谢Damien的更新,您能帮我介绍一下创建
@v4
的最佳语法吗?这样它就变得灵活了??