2

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

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

有人可以帮忙吗?

4

7 回答 7

4

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

insert into url
select 'myvalue'
where not exists (select * from url where url = 'myvalue')
于 2009-04-07T16:04:08.680 回答
1

您可能想阅读此线程。在 sql-server-compact-edition 上执行插入或更新 upsert

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

于 2009-06-30T07:54:02.443 回答
0

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

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

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

于 2009-04-07T16:03:33.113 回答
0

使用外部联接

Insert into X(...) select blah, blah, blah from table t left outer join X on t.id=x.id where x.id is null

于 2009-06-25T14:03:49.687 回答
0

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

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

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

INSERT INTO myTable (keyField, myValue)
SELECT I.keyField, I.myValue
FROM (
SELECT 'Hello World' AS myValue, 'MyKey' AS keyField
) I
LEFT JOIN myTable T ON I.keyField = T.keyField
WHERE T.keyField无效的;

于 2016-02-20T05:22:57.877 回答
-2

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

一个经典的例子是插入或更新,也就是保存。

IF EXISTS(SELECT * FROM Table_A WHERE Column_1 = @Parameter)
BEGIN
    --Update Statement here.
END
ELSE
BEGIN
    --Insert Statement here.
END
于 2009-04-07T18:05:44.333 回答
-2

像这样的东西怎么样:

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

资源

于 2009-06-25T00:45:35.883 回答