2

単純な 1 フィールド テーブルを検証して、重複を挿入する前にレコードが存在するかどうかを確認しようとしています。

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

誰か助けてくれませんか?

4

7 に答える 7

4

コード例は SQL のフル バージョンで実行されます。または、次のように再配置することもできます。

insert into url
select 'myvalue'
where not exists (select * from url where url = 'myvalue')
于 2009-04-07T16:04:08.680 に答える
1

このスレッドを読みたいと思うかもしれません。挿入または更新アップサートを実行する SQL サーバー コンパクト エディション

簡単に言えば、sqlce 固有のソリューション (SqlCeResultSet を使用) が最大のパフォーマンスを提供します。

于 2009-06-30T07:54:02.443 に答える
0

外部結合を使用する

X(...)に挿入します。テーブルから何とか、何とか、何とかを選択します。t.id=x.idの左外部結合X。x.idはnullです。

于 2009-06-25T14:03:49.687 に答える
0

それを逆にして、条件をwhere句の述語として追加するだけです

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

...しかし、あなたの基本的な問題は、挿入テーブルに代替キー (一意) 制約を配置し、url 列を参照することで解決できるように思えます (Sql CE は参照整合性 (RI) 制約を行うと思いますか?)

于 2009-04-07T16:03:33.113 に答える
0

確かに、これは投稿日を過ぎていますが、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ヌル;

于 2016-02-20T05:22:57.877 に答える
-2

このようなものはどうですか:

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

ソース

于 2009-06-25T00:45:35.883 に答える
-2

あなたは 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
于 2009-04-07T18:05:44.333 に答える