2012-02-09 15 views
3

私はINSERT INTOを使ってもIDを取得できます...存在しない場所はありますか? これを修正する方法は、挿入されたレコードのIDまたは既に存在しているレコードのIDですか?可能であれば、まったく!私はIDの値を取得することができますどのように自動インクリメントの整数 で「ID」という列を持っているsqlite INSERT INTO ...存在しないIDはどこにありますか?

INSERT INTO Timeline (name, ts) 
SELECT @name, @ts 
WHERE NOT EXISTS (SELECT 1 FROM Timeline WHERE [email protected] AND ts = @ts); 

?あなたもアップデートに

EDITED
update Timeline 
set name = @name 
output deleted.name as OLD_NAME, inserted.name as NEW_NAME 

を行うことができます

insert into Timeline output inserted.name 
SELECT @name, @ts 
WHERE NOT EXISTS (SELECT 1 FROM Timeline WHERE [email protected] AND ts = @ts); 

:あなたは出力句を使用することができます

歓声

+0

このステートメントでは、テーブルにまだ新しいレコードが挿入されていない場合は、新しいレコードが挿入されます。その完全に有効なステートメント – Lamak

+0

私はそれを私にidまたはid列の値をもたらす方法に関する私の質問を知っていますか? –

+0

行が挿入されたかどうか、または行がすでに存在しているかどうかを知りたいですか?行数を教えてもらえませんか? – Ben

答えて

-1

これを実行すると、あなたが理解します:

create table Timeline(
id int not null primary key identity(1,1), 
name varchar(50), 
ts varchar(50)) 

insert into timeline output inserted.ID 
values ('first record', 'ts') 
--it will show 1 


insert into Timeline output inserted.ID 
SELECT 'first record', 'ts' 
union select 'new record', 'ts' 
WHERE NOT EXISTS (SELECT 1 FROM Timeline WHERE name='first record' AND ts = 'ts') 
--ir will show 2 because the 1 already exits 
+0

あなたは "output inserted.name"の部分を説明することができます!私がそれを理解すれば、それは –

+0

に挿入された値を表示することに注意してください。クエリ – Diego

+0

を実行しようとすると、問題を説明する上で明確ではなかったようです。申し訳ありませんが、今質問を編集しました。 –

1

あなたは(name,ts)がユニークであることを保証していますので、これはすべきことです。

INSERT INTO Timeline (name, ts) 
SELECT @name, @ts 
WHERE NOT EXISTS (SELECT 1 FROM Timeline WHERE [email protected] AND ts = @ts); 

SELECT id, name, ts from TimeLine 
WHERE [email protected] AND ts = @ts 
関連する問題