我正在尝试验证一个简单的1字段表,以确定在插入副本之前是否存在记录。
if not exists (select * from url where url = ...)
insert into url...
有人可以帮忙吗?
答案 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 (...)