単純な 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 サーバー コンパクト エディション
簡単に言えば、sqlce 固有のソリューション (SqlCeResultSet を使用) が最大のパフォーマンスを提供します。
外部結合を使用する
X(...)に挿入します。テーブルから何とか、何とか、何とかを選択します。t.id=x.idの左外部結合X。x.idはnullです。
それを逆にして、条件をwhere句の述語として追加するだけです
Insert Into Table ....
Where Not Exists
(Select * From table where ...)
...しかし、あなたの基本的な問題は、挿入テーブルに代替キー (一意) 制約を配置し、url 列を参照することで解決できるように思えます (Sql CE は参照整合性 (RI) 制約を行うと思いますか?)
確かに、これは投稿日を過ぎていますが、Google の簡単な検索でこれに対する回答が他に見られないので、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 ISヌル;
このようなものはどうですか:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
あなたは IF NOT EXISTS で正しい道を進んでいます。サブクエリよりも IF NOT EXISTS() または IF EXISTS() を使用することをお勧めします。SQL Server は、探している EXISTS() 条件に一致する最初のインスタンスを見つけると、テーブル内の行のスキャンを停止するためです。上記の例で記述されたサブクエリを使用すると、テーブル全体がスキャンされます。
古典的な例は、SAVE とも呼ばれる Insert または Update です。
IF EXISTS(SELECT * FROM Table_A WHERE Column_1 = @Parameter)
BEGIN
--Update Statement here.
END
ELSE
BEGIN
--Insert Statement here.
END