我正在尝试验证一个简单的 1 字段表,以确定在插入重复项之前是否存在记录。
if not exists (select * from url where url = ...)
insert into url...
有人可以帮忙吗?
我正在尝试验证一个简单的 1 字段表,以确定在插入重复项之前是否存在记录。
if not exists (select * from url where url = ...)
insert into url...
有人可以帮忙吗?
您的代码示例将在完整版 SQL 中运行,或者您可以重新排列为以下内容:
insert into url
select 'myvalue'
where not exists (select * from url where url = 'myvalue')
您可能想阅读此线程。在 sql-server-compact-edition 上执行插入或更新 upsert
简而言之,一个特定于 sqlce 的解决方案(使用 SqlCeResultSet)将提供最大的性能。
只需将其反转并将条件添加为 where 子句谓词
Insert Into Table ....
Where Not Exists
(Select * From table where ...)
...但是您的基本问题听起来可能可以通过在插入表上放置一个备用键(唯一)约束来更好地解决,引用 url 列(我假设 Sql CE 有参照完整性(RI)约束?)
使用外部联接
Insert into X(...) select blah, blah, blah from table t left outer join X on t.id=x.id where x.id is null
诚然,这已经过了发布日期,但由于我没有在我的快速谷歌搜索中看到这个答案,我想我会分享我是如何用 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无效的;
如果不存在,您将走在正确的道路上。使用 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
像这样的东西怎么样:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)