Использование SQl Server CE; Можно вставить только если не существует? - PullRequest
2 голосов
/ 07 апреля 2009

Я пытаюсь проверить простую таблицу из 1 полей, чтобы определить, существует ли запись перед вставкой дубликата.

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

Может ли кто-нибудь помочь?

Ответы [ 7 ]

4 голосов
/ 07 апреля 2009

Ваш пример кода будет работать в полной версии SQL, или вы можете изменить его на следующее:

insert into url
select 'myvalue'
where not exists (select * from url where url = 'myvalue')
1 голос
/ 30 июня 2009

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

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

0 голосов
/ 20 февраля 2016

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

- обновить значение существующей записи
ОБНОВЛЕНИЕ myTable
SET myValue = 'Hello World'
WHERE keyField = 'MyKey';

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

INSERT INTO myTable (keyField, myValue)
ВЫБЕРИТЕ I.keyField, I.myValue
С (
ВЫБЕРИТЕ «Hello World» как myValue, «MyKey» как keyField
) Я
СЛЕДУЕТ ПОДКЛЮЧИТЬ myTable T ON I.keyField = T.keyField
ГДЕ T.keyField NULL;

0 голосов
/ 25 июня 2009

Использовать внешнее соединение

Вставить в X (...) выберите бла, бла, бла от таблица t левого внешнего соединения X на t.id = x.id где x.id равен нулю

0 голосов
/ 25 июня 2009

Что-то вроде этого:

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

Источник

0 голосов
/ 07 апреля 2009

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

Классическим примером является вставка или обновление, иначе SAVE.

IF EXISTS(SELECT * FROM Table_A WHERE Column_1 = @Parameter)
BEGIN
    --Update Statement here.
END
ELSE
BEGIN
    --Insert Statement here.
END
0 голосов
/ 07 апреля 2009

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

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

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

...