Использование SQl Server CE; Возможно вставить только в случае отсутствия?

Я пытаюсь проверить простую таблицу полей 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') 

Возможно, вы захотите прочитать эту тему. выполнения-вставка или-обновления-upsert-на-SQL-сервер-компактное издание

В двух словах специальное решение sqlce (с использованием SqlCeResultSet) обеспечит максимальную производительность.

Просто измените его и добавьте условие в качестве предиката where where

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

… Но ваша основная проблема звучит так, будто ее можно было бы лучше решить, поставив альтернативное ключевое (уникальное) ограничение на таблицу вставки, ссылаясь на столбец url (я предполагаю, что Sql CE имеет ограничения ссылочной целостности (RI)?)

Использовать Outer Join

Вставить в X (…) выбрать blah, blah, blah из таблицы t left external join X на t.id = x.id, где x.id равно null

Конечно, это путь к дате публикации, но поскольку я не видел, чтобы это отвечало в другом месте моего быстрого поиска Google, я думал, что поделюсь тем, как я решил это с помощью SQL CE, чтобы другие поиски могли найти ответ.

– Обновление существующей записи
ОБНОВИТЬ myTable
SET myValue = 'Hello World'
WHERE keyField = 'MyKey';

– Вставить новую запись, если существующая запись не существует`

INSERT INTO myTable (keyField, myValue)
SELECT I.keyField, I.myValue
ИЗ (
SELECT 'Hello World' AS myValue, «MyKey» AS keyField
) I
LEFT JOIN myTable T ON I.keyField = T.keyField
WHERE T.keyField IS NULL;

Вы находитесь на правильном пути, ЕСЛИ НЕ СУЩЕСТВУЕТ. Лучше использовать IF NOT EXISTS () или IF EXISTS (), чем Sub Query, потому что SQL Server прекратит сканирование строк в таблице, когда найдет первый экземпляр, соответствующий условию EXISTS (), который вы ищете. С помощью Sub Query, написанного в приведенных выше примерах, он будет сканировать всю таблицу.

Классическим примером является Insert или Update, а также SAVE.

 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 (...) 

Источник