所以我有一些插入:
insert into table (col1, col2, dummy, col3) values (1,1,1,1), (2,2,2,2)
“虚拟”列实际上并不存在,它是必需的,因为我生成了insert语句,甚至是列标题,并且根据情况需要忽略一些列,但是数据仍然是相同的,它会使如果我不需要弄乱数据和标题,我的生活会轻松得多。
所以我想用另一种方式说:是否可以“忽略”插入语句中的列。
换句话说,我试图在3列上插入一个包含4列数据的插入语句,并想知道是否有任何方法可以在SQL级别而不是代码处理这个问题。逻辑层面。
所以这是一个较长的例子,我有这个2D数组。
{ {101,102,103,104}, {201,202,203,204}, ... }
我有一个包含以下列的表
col1, col2, col3, col4
现在有一位用户说:
"I would like to only use col1, col2, col4"
另一位用户说:
"I would like to only use col2, col3"
如果我不想弄乱2D数据阵列,我该怎么做?
insert into table (col1, col2, ignore, col4)
values (101,102,103,104), (201,202,203,204)
insert into table (ignore, col2, col3, ignore)
values (101,102,103,104), (201,202,203,204)
请注意,订单很重要。
答案 0 :(得分:7)
这听起来像是一个疯狂的疯狂要求,但有一种方法可以让它发挥作用。
使用包含3列t
的表(a,b,c)
,您可以使用SQL-Server 2008及更高版本中提供的表值构造函数。请注意如何通过仅更改一行SQL代码来更改将输入的哪些列插入到表中:
INSERT INTO t
(a, b, c)
SELECT
col1, col3, col4 -- this is the only line needs configured
-- col2 is ignored
FROM
( VALUES
( 1, 2, 3, 4),
(11,12,13,14),
(21,22,23,24),
(31,21,33,34)
) AS x
(col1, col2, col3, col4)
;
进行测试
如果表格有4列(a,b,c,d)
- 与值列表一样多 - 类似的方法是:
INSERT INTO t
(a, b, c, d)
SELECT
col1, NULL, col3, col4 -- this is the only line needs configured
-- col2 is ignored and NULLs are put
-- into column "b"
FROM --- rest of the code is the same
答案 1 :(得分:4)
是否可以“忽略”插入语句中的列。
是的,请勿将其包含在字段列表中。例如:
insert into table (col1, col2, col3)
只会将值插入col1
,col2
,col3
,并将其余列(在新行中)保留为默认值。