【问题标题】:Merge and When Matched query giving an error sql server合并和匹配查询时给出错误 sql server
【发布时间】:2017-03-08 13:12:27
【问题描述】:

我有一个要测试的查询。如果查询在具有现有主键的表中找到数据,则应更新数据。如果没有,则插入到表中。

主键是 int 类型,在属性中我可以看到 Identity 设置为“True”,我认为这意味着如果插入主键,它将自动为主键设置新 id。

MERGE INTO Test_table t
USING (SELECT 461232 ID,'Test1-data' Fascia FROM Test_table) s
ON (t.ID = s.ID)
WHEN MATCHED THEN
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN
INSERT (Fascia)
VALUES (s.Fascia);

这里的问题是这个查询不起作用,它从不插入数据或更新。此外,查询被编译,我没有得到任何编译错误

另外我想要这个查询的原因是因为我将使用 Java 准备好的语句来查询数据库,所以我假设我可以做到

SELECT ? ID,? Fascia FROM Test_table

这样我就可以在 java 中使用 set 方法传递值。

如果我的查询有问题,请告诉我。

【问题讨论】:

  • “这里的问题是这个查询不起作用”。等我拿我的水晶球来找出问题所在。 “查询给出错误”好吧,那是什么错误,如果您需要我们的帮助,为什么要让我们蒙在鼓里???
  • @HoneyBadger 我不会让你蒙在鼓里......查询不会更新或插入,但它会在没有任何错误的情况下执行。更新的问题。

标签: java sql-server prepared-statement


【解决方案1】:

您正在从目标表中选择作为源。

您需要取出自己的FROM Test_table或具有在Test_table之前您@ 987654324至少1行@ P>

rextester 演示:http://rextester.com/XROJD28508

MERGE INTO Test_table t
USING (SELECT 461232 ID,'Test1-data' Fascia --FROM Test_table
      ) s
ON (t.ID = s.ID)
WHEN MATCHED THEN
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN
INSERT (Fascia)
VALUES (s.Fascia);

【讨论】:

  • @user3384231 乐于助人!
  • @ SqlZim我面临同样的问题,能否请您解释更多什么是错与?? SPAN>
  • @ V8-E原来的问题,使用一个空表用虚设值,而不是只使用值。如果从表0行选择,你会得到0行,即使你在@ 987654326使用虚值@。 SPAN>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多