当条件满足时,我试图将值插入表的1列。
注意:该表已包含所有列的数据,但是1表示为空。我想根据WHERE子句将值插入此1列。
我有这个问题:
INSERT INTO <TABLE_NAME>
(COLUMN_NAME)
(VALUE)
WHERE <CONDITION>
我得到一个例外:
WHERE关键字附近的语法不正确
我可以使用UPDATE执行此操作:
UPDATE <TABLE_NAME>
SET <COL_NAME>
WHERE <CONDITION>
但是想知道为什么INSERT查询失败了。任何建议表示赞赏。
答案 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子句的地方。