Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить primary key после insert  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Добрый день. Есть таблица с первичным ключём Id. Тип данных uniqueidentifier.

Хотелось бы вернуть этот ключ после insert into. Пытался делать так

INSERT INTO... ;

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];  


возвращает NULL

Создать в этой таблице столбец id_num int IDENTITY(1,1) не представляется возможным.

Подскажите что можно сделать?
1 авг 19, 08:50    [21939462]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Hopfen_Artur,

OUTPUT INSERTED.Id
1 авг 19, 08:52    [21939463]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
TaPaK,

А вот так правильно будет?

DECLARE @myid uniqueidentifier = NEWID();  
INSERT INTO ...
SELECT @myid as id;  
1 авг 19, 09:01    [21939473]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Hopfen_Artur
TaPaK,

А вот так правильно будет?

DECLARE @myid uniqueidentifier = NEWID();  
INSERT INTO ...
SELECT @myid as id;  

ну если вам нравится вставлять по одной записи, то кто вам запретит
1 авг 19, 09:01    [21939474]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
uaggster
Member

Откуда:
Сообщений: 757
Hopfen_Artur
TaPaK,

А вот так правильно будет?

DECLARE @myid uniqueidentifier = NEWID();  
INSERT INTO ...
SELECT @myid as id;  

Нет, неправильно.
Если уж вы собрались использовать в качестве id GUIDы - используйте SEQUENTIAL GUID. Таблицы будут меньше фрагментироваться.
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/newsequentialid-transact-sql?view=sql-server-2017

CREATE TABLE #myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID(), ColumnB varchar(100));

Declare @t table (ColumnA uniqueidentifier, ColumnB varchar(100))

insert into #myTable (ColumnB)
output inserted.* into @t
	Values ('1'), ('2'), ('3')

Select * from @t
1 авг 19, 10:10    [21939545]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
uaggster,

автор
Таблицы будут меньше фрагментироваться.

с чего бы это случится?

ну и бывают не кластерные PK
1 авг 19, 10:13    [21939549]     Ответить | Цитировать Сообщить модератору
 Re: Как получить primary key после insert  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Ещё не выяснили, нет ли у таблицы триггера INSTEAD OF INSERT.
Если есть, никакой OUTPUT не поможет.
1 авг 19, 10:22    [21939557]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить