SQL Server 2005: метка времени T-SQL INSERT INTO и OUTPUT для переменной - PullRequest
3 голосов
/ 20 октября 2010

Пример:

IF OBJECT_ID('T1') IS NOT NULL
DROP TABLE T1;
GO

CREATE TABLE T1 (id int PRIMARY KEY, timestamp);
GO

INSERT INTO T1(id) VALUES (1);
GO

declare @v timestamp;
INSERT INTO T1(id) OUTPUT inserted.timestamp as v VALUES (10);
select @v

Как я могу вставить insert.timestamp в переменную @v?

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Вот что я получил для работы:

IF OBJECT_ID('T1') IS NOT NULL 
DROP TABLE T1; 
GO 

CREATE TABLE T1 (id int PRIMARY KEY, timestamp); 
GO 

INSERT INTO T1(id) VALUES (1); 
GO 

declare @v as table ([timestamp] varbinary) --timestamp; 
INSERT INTO T1(id) 
OUTPUT inserted.[timestamp] into @v 
VALUES (10); 

select * from @v 

Одна вещь, которую вам нужно понять, это поле отметки времени, которое нельзя заполнять вручную.Таким образом, вы должны использовать какой-то другой тип в вашей выходной таблице.И, кстати, метка времени устарела, я бы вообще не использовал ее в новых разработках.Вместо этого используйте rowversion.И отметка времени не означает, что это будет дата для тех, кто считает, что она должна быть похожа на стандарт ANSII, в SQL Server она не является датой или конвертируется в дату.

0 голосов
/ 20 октября 2010

Ну, вы вставляете определенное значение в столбец ID, который является первичным ключом - поэтому просто прочитайте строку, как только вы ее вставите ...

INSERT INTO T1(id) VALUES (1);
GO

DECLARE @v timestamp

SELECT @v = TIMESTAMP 
FROM dbo.T1 
WHERE ID = 1

SELECT @v
0 голосов
/ 20 октября 2010

Один из способов использования идентификатора:

declare @v timestamp; 
declare @ID int; 
INSERT INTO T1(id) OUTPUT inserted.timestamp as v VALUES (10); 
select @ID =@@IDENTITY;
select @v=timestamp from T1 where id=@ID;

(правка) ... конечно, для этого потребуется столбец идентификаторов. Поскольку вы знаете значение идентификатора, который вы вставляете, вам даже не нужно этого делать, просто выберите ту же строку после вставки, используя исходное значение.

Смысл, который вы хотели бы сделать, это все в одном утверждении? Вероятно, вы могли бы сделать это с помощью триггера, но, похоже, это не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...