带条件的SQL插入查询

时间:2015-08-16 19:29:34

标签: sql sql-server sql-server-2008 tsql

当条件满足时,我试图将值插入表的1列。

注意:该表已包含所有列的数据,但是1表示为空。我想根据WHERE子句将值插入此1列。

我有这个问题:

INSERT INTO <TABLE_NAME>
(COLUMN_NAME)
(VALUE)
WHERE <CONDITION>

我得到一个例外:

  

WHERE关键字附近的语法不正确

我可以使用UPDATE执行此操作:

UPDATE <TABLE_NAME>
SET <COL_NAME>
WHERE <CONDITION>

但是想知道为什么INSERT查询失败了。任何建议表示赞赏。

10 个答案:

答案 0 :(得分:6)

据我了解您的问题,您已经有一行数据,并且该行中的一列没有值,因此您希望将值添加到该列中。

这是更新现有行的方案,而不是插入新行。当数据已经存在并且您想要修改记录时,必须使用UPDATE子句。如果要在表中插入新行,请选择“插入”。

因此,在您当前的场景中,Update Clause是您的Where子句的朋友,因为您想要修改记录的子集而不是全部。

UPDATE <TABLE_NAME>
SET <COL_NAME>
WHERE <CONDITION>

INSERT子句根据任何RDBMS语法没有任何Where子句(我认为)。 Insert是条件少sql查询,而SELECT,UPDATE,DELETE都是条件命令,你可以在以后的所有中添加Where子句。

答案 1 :(得分:2)

为了在已填充行时向一列添加值,您需要使用更新语句。
如果需要插入具有where子句的新行,则需要在select语句中使用insert:

INSERT INTO <table> (<columns>)
SELECT <columns>
FROM <table>
WHERE <condition>;

答案 2 :(得分:1)

根据您的问题,我觉得您正在尝试更新表格中的列而不是插入。

类似的东西:

UPDATE column SET value WHERE different_column_value = some_value

答案 3 :(得分:1)

我知道这有点晚了,对于那些仍然想在插入查询中使用where子句的人来说,有可能被黑客入侵。

我的理解是,您只想在条件为真时才插入。假设您的数据库“姓”中有一列,并且仅在表中不存在姓的情况下才想插入。

您还想要类似INSERT INTO table_name blha blha blah WHERE surname!=“ this_surname”。

解决方案是在您的管理面板中使该单元格唯一。

答案 4 :(得分:0)

Insert语句将插入新记录。您不能将where子句应用于要插入的记录。

where子句可用于更新所需的行。 更新SET = where。

但是insert不会有where子句。 希望这能回答你的问题

答案 5 :(得分:0)

SQL Insert不接受where参数,你可以查看:SQL Insert Definition ...

我不知道你想做什么的整个问题,但是只使用INSERT语句是不可能的,但是如果这些数据依赖于另一个表或者数据,则可以调节数据插入到表中。来自另一张桌子......点击这里...... SQL Insert explain in wikipedia

像这样:

从其他表格中复制行

INSERT INTO phone_book2
SELECT *
FROM   phone_book
WHERE  name IN ('John Doe', 'Peter Doe')

INSERT INTO phone_book2 ( [name], [phoneNumber] )
SELECT [name], [phoneNumber]
FROM   phone_book
WHERE  name IN ('John Doe', 'Peter Doe')

答案 6 :(得分:0)

我认为您所包含的代码只是一个模板,用于显示您的查询结构。请参阅SO问题here, here和MSDN问题here.

在SQL Server(使用Transact-SQL又称T-SQL)中,您需要UPDATE INSERT查询列,其中列已有值 - 使用答案@HaveNoDisplayName给出:)

如果您从代码执行INSERT / UPDATE(或者如果您经常需要它),我强烈建议您使用带参数的存储过程。

您可以通过使用INSERT向过程添加IF-ELSE块来进一步扩展该过程,以确定是执行INSERT新记录还是更新现有记录,如{{ 3}}回答。

最后,看看this沙盒游乐场来测试你的SQL而不会对你的RDMS造成风险:-)

答案 7 :(得分:0)

如果需要为现有行的列添加数据,则为UPDATE

INSERT在表中创建新行。

对于条件INSERT,可以使用MERGE命令。

答案 8 :(得分:0)

我发现专用的情况很有用:避免重复的条件插入:

aspectRatio

答案 9 :(得分:0)

INSERT语法不能具有WHERE子句。当您使用INSERT INTO ... SELECT语句时,唯一会发现INSERT具有WHERE子句的地方。