Выходной пункт объяснил - PullRequest
7 голосов
/ 27 февраля 2011

Может кто-нибудь объяснить мне предложение вывода SQL Server? Я прочитал статью MSDN, и я все еще очень смущен этим. Спасибо.

Ответы [ 3 ]

8 голосов
/ 27 февраля 2011

Некоторые примеры помогают? Ниже приведены все результаты для клиента, но вы также можете OUTPUT INTO a @table_variable (или стандартную таблицу при определенных условиях)

create table T
(
id int identity(1,1),
c char(1)
)

insert into T(c) 
OUTPUT inserted.* /*Output Inserted Rows - shows the ids that were allocated*/
values ('A'),('B'),('C')

Возвращает

id          c
----------- ----
1           A
2           B
3           C

.

UPDATE T
SET c = CHAR(ASCII(c)+1)
 /*Output before and after versions of each row*/
OUTPUT deleted.*, inserted.*
WHERE id IN (2,3)

Возвращает

id          c    id          c
----------- ---- ----------- ----
2           B    2           C
3           C    3           D

.

DELETE 
FROM T
 /*Output the row(s) that were deleted*/
OUTPUT deleted.*
WHERE DATEPART(second, getdate())%id = 0

Возвращает (например)

id          c
----------- ----
1           A

Edit:

В ответ на комментарий несколько примеров, показывающих, как OUTPUT может использоваться для вставки в таблицу.

CREATE TABLE #T2
(
id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
c CHAR(1)
)

DECLARE @inserted TABLE
(
id UNIQUEIDENTIFIER,
c CHAR(1)
)

INSERT INTO #T2(c) 
OUTPUT inserted.id, inserted.c 
INTO @inserted
VALUES ('A')

Если вы используете SQL Server 2008, вы можете использовать составной DML

INSERT INTO @inserted
SELECT I.id, I.c
FROM 
    (
    INSERT INTO #T2(c) 
    OUTPUT inserted.id, inserted.c 
    VALUES ('B'),('C')
    ) AS I
WHERE c <> 'C' --Only add rows of interest to @inserted table

Но вы получите сообщение об ошибке, если цель вставки участвует в отношениях PK / FK. Если вы столкнулись с этой проблемой, вы также можете использовать этот шаблон .

INSERT INTO @inserted
EXEC sp_executesql N'
    INSERT INTO #T2(c) 
    OUTPUT inserted.id, inserted.c 
    VALUES (''D''),(''E'') '
1 голос
/ 27 февраля 2011

Можно указать как

Как узнать, какие строки были удалены, вставлены или обновлены?

Вы можете использовать какой-нибудь необычный триггерный код или отдельный SELECT, но предложение OUTPUT делает его легким. SELECT становится частью фактического DELETE, INSERT или UPDATE

0 голосов
/ 27 февраля 2011

Предложение OUTPUT позволяет объединить INSERT или UPDATE с SELECT.

. Вы можете OUTPUT список полей, и запрос вернет одну строку длякаждая строка затронута INSERT / UPDATE.

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