Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 是否可以在值中没有行的情况下插入?_Sql Server_Tsql - Fatal编程技术网

Sql server 是否可以在值中没有行的情况下插入?

Sql server 是否可以在值中没有行的情况下插入?,sql-server,tsql,Sql Server,Tsql,我知道这个问题可能有点深奥,但是否可以创建一个带有无值的VALUES子句的INSERT语句 INSERT myTable (col1, col2) VALUES <no values> INSERT myTable (第1列,第2列) 价值观 我正在以编程方式生成INSERT语句,我可以通过执行IF检查来解决这个问题,该检查不会生成INSERT,但我很好奇,这个value语句可以看作是一个集合。集合可能是空的 文档中未提及空集的任何内容: 您可以用默认数据填充列。可能0代表int

我知道这个问题可能有点深奥,但是否可以创建一个带有无值的
VALUES
子句的
INSERT
语句

INSERT myTable
(col1, col2)
VALUES
<no values>
INSERT myTable
(第1列,第2列)
价值观
我正在以编程方式生成
INSERT
语句,我可以通过执行
IF
检查来解决这个问题,该检查不会生成
INSERT
,但我很好奇,这个
value
语句可以看作是一个集合。集合可能是空的

文档中未提及空集的任何内容:
您可以用默认数据填充列。可能0代表int,空字符串代表text等等。否则,可以将列设为null,并用null值填充它们。它取决于您定义为空的内容。

简而言之,您的代码很好,只是您使用的是伪代码。它应该是这样的:

INSERT into myTable
(col1, col2)
VALUES
(null, null)
只要您的列被设置为接受空值,这将非常好地工作
您可能需要考虑在其中获得一个自动增量ID字段,以便以后可以识别这些新行。

< P>可以通过SELECT语句生成插入。
INSERT INTO myTable (col1, col2)
SELECT FROM otherTable WHERE condition

如果select没有返回任何行,则不会插入任何记录,也不会引发异常。顺便说一句,在较大的记录计数上,这比创建单行insert语句要快得多。

集合理论识别空集合,但insert值不识别空集合

INSERT INTO myTable (col1, col2)
SELECT FROM otherTable WHERE condition
两个可能的选项:
插入空值并具有使插入无效的插入触发器

插入空值并有一个排除它们的视图

我能想象的唯一的用例是,您希望通过一个大的数据流向前读取,并在记录的末尾知道是否有要插入的值。您可以将“插入值”重写为“插入选择”,并在末尾添加一个阻止插入的条件

insert into myTable(col1, col2)
select null, null
where 1 = 2

没有简单的语法解决方案,但是您可以通过使行生成器稍微复杂一点来解决这个问题

您可以重写生成行的部分,用一组

SELECT values
UNION ALL
SELECT values
UNION ALL
...

其中
某些列
应在无法生成
NULL
的列中选择。同样,如果
(NULL,…)
行恰好是值中生成的唯一行,则生成的查询将不插入任何内容。

使字段为NULL并使用
NULL
?这基本上意味着我对盖尔式的耸耸肩一无所知。你为什么不试试这个,看看它是否失败?它确实失败了,我想知道是否有一种语法不会失败:)是的,我找不到一种方法来调用insert而不插入任何内容。你试图做的是生成(什么是无效的)SQL并执行它以使其不插入任何内容?坚持在程序逻辑中使用条件排除该查询的想法——这更有意义。否则,您只是执行一个带有错误抑制的SQL查询,它永远不会是整洁的或正确的。我知道这是一个角落case@Aツ Null不是垃圾。null my的计数可能是有效的指标。抱歉,(只有)null值的记录是垃圾记录。如果为True,则可以计算空行数,但可以计算包括垃圾在内的行数;)插入空值的原因有很多。未来更新的占位符是最明显的。这就是为什么我建议添加一个ID字段。所以整行不是空的。@m0n0ph0n所以你不知道如何从计数中排除空值?从col1不为null的表中选择count(*),或仅从中选择count(col1)table@durb确保根据db设计使用可空字段是有意义的。我只是想说,在他的特殊情况下,插入一个只有空值的行是没有意义的,只是为了不抛出错误。这与插入值无关。OtherTable甚至可能不包含值。我知道问题是是否可以将值视为一个集合,子选择就是这样一组数据。“带值的INSERT语句”值不是select而不是子选择。你的答案中没有值。好的,是真的。但这仍然是一个有效的声明。我的意图只是对原问题的想法再作思考。如果严格需要这些值,我的简单答案是:不,这是不可能的,请执行条件检查。
INSERT INTO
  target_table (target_columns)
SELECT
  *
FROM
  (VALUES
    (...),
    ...
    (NULL, ...)  -- obligatory element
  ) AS v (column_names)
WHERE
  some_of_the_columns IS NOT NULL
;