使用SQl Server CE;只有在不存在时才可以插入?

时间:2009-04-07 15:55:09

标签: sql tsql sql-server-ce

我正在尝试验证一个简单的1字段表,以确定在插入副本之前是否存在记录。

if not exists (select * from url where url = ...)
insert into url...

有人可以帮忙吗?

7 个答案:

答案 0 :(得分:4)

您的代码示例将在完整版本的SQL中运行,或者您可以重新排列为以下内容:

insert into url
select 'myvalue'
where not exists (select * from url where url = 'myvalue')

答案 1 :(得分:1)

您可能想要阅读此主题。 performing-insert-or-update-upsert-on-sql-server-compact-edition

简而言之,一个特定于sqlce的解决方案(使用SqlCeResultSet)将提供最大的性能。

答案 2 :(得分:0)

只需将其反转并将条件添加为where子句谓词

 Insert Into Table .... 
  Where Not Exists 
 (Select * From table where ...) 

...但是你的基本问题听起来似乎可以通过在插入表上放置一个备用键(唯一)约束来更好地解决,引用url列(我假设Sql CE执行参照完整性(RI)约束?)< / p>

答案 3 :(得分:0)

使用外部加入

插入X(...) 选择等等,等等等等 从     表t左外连接     X在t.id = x.id上 哪里     x.id为null

答案 4 :(得分:0)

当然,这已经过了发布日期,但由于我在快速谷歌搜索中没有看到其他地方的答案,我想我会分享我是如何用SQL CE解决这个问题的,所以其他人搜索可能会找到答案。

  

- 更新现有记录的值
  更新myTable
SET myValue ='Hello World'
WHERE keyField ='MyKey';

     

- 如果现有记录不存在,则插入新记录

     

INSERT INTO myTable(keyField,myValue)
  选择I.keyField,I.myValue
  FROM(
  选择'Hello World'AS myValue,'MyKey'AS keyField
  )我
  LEFT JOIN myTable T ON I.keyField = T.keyField
  WHERE T.keyField IS NULL;

答案 5 :(得分:-2)

你在IF NOT NOT EXISTS的正确道路上。最好使用IF NOT EXISTS()或IF EXISTS()而不是Sub Query,因为当SQL Server找到与您要查找的EXISTS()条件匹配的第一个实例时,它将停止扫描表中的行。使用上面示例中编写的Sub Query,它将扫描整个表。

经典示例是插入或更新,即SAVE。

IF EXISTS(SELECT * FROM Table_A WHERE Column_1 = @Parameter)
BEGIN
    --Update Statement here.
END
ELSE
BEGIN
    --Insert Statement here.
END

答案 6 :(得分:-2)

这样的事情:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)

Source