sqlite INSERT INTO ... ГДЕ НЕ СУЩЕСТВУЕТ и получить идентификатор? - PullRequest
3 голосов
/ 09 февраля 2012

возможно ли получить идентификатор, даже если я использую INSERT INTO ... ГДЕ НЕ СУЩЕСТВУЕТ? как изменить его, чтобы он принес мне идентификатор вставленной записи или идентификатор уже существующей записи? если вообще возможно!

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

у меня есть столбец с именем " id " с автоматическим приращением целого числа как я могу получить значение идентификатора?

ура

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы гарантируете, что (name,ts) уникален, поэтому это должно сработать.

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

SELECT id, name, ts from TimeLine
WHERE name=@name AND ts = @ts
0 голосов
/ 09 февраля 2012

вы можете использовать предложение вывода:

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

вы можете сделать это и при обновлении

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

РЕДАКТИРОВАНИЕ:

запустите это, и вы поймете:

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