2014-09-30 72 views
1

有沒有辦法來從OUTPUT子句的XML,像下面生成輸出XML子句

DECLARE @Test TABLE (Id int, Name varchar(max)) 

INSERT @Test 
OUTPUT (SELECT INSERTED.* FOR XML RAW('data'), ELEMENTS XSINIL, TYPE) 
VALUES (1, 'One'), (2, 'Two'), (3, 'Three') 

UPDATE @Test SET Name = Name 
OUTPUT (SELECT DELETED.*, INSERTED.* FOR XML RAW('data'), ELEMENTS XSINIL, TYPE) 

DELETE FROM @Test 
OUTPUT (SELECT DELETED.* FOR XML RAW('data'), ELEMENTS XSINIL, TYPE) 

但擔任該代碼失敗,「子查詢不允許在OUTPUT子句中」。

感謝, 斯拉瓦

回答

1

MSDN

The OUTPUT clause is not supported in the following statements: 
• DML statements that reference local partitioned views, distributed partitioned views, or remote tables. 
• INSERT statements that contain an EXECUTE statement. 
• Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100. 
• The OUTPUT INTO clause cannot be used to insert into a view, or rowset function. 
• A user-defined function cannot be created if it contains an OUTPUT INTO clause that has a table as its target. 

使用輸出子句您不能生成XML。因此,另一種方法是聲明一箇中間表變量作爲目標,然後在插入或更新表時從中選擇SELECT。這樣的事情 -

DECLARE @T TABLE (Id int, Name varchar(max)) 

INSERT @Test 
OUTPUT INSERTED.* 
INTO @T 
VALUES (1, 'One'), (2, 'Two'), (3, 'Three') 

DELETE FROM @Test 
OUTPUT DELETED.* 
INTO @T 

SELECT * 
FROM @T FOR XML RAW('data'), ELEMENTS XSINIL, TYPE 
0

試試這個:

DECLARE @Test TABLE (Id int, Name varchar(max)) 
DECLARE @Inserted TABLE (Id int, Name varchar(max)) 

INSERT @Test 
OUTPUT INSERTED.* INTO @Inserted 
VALUES (1, 'One'), (2, 'Two'), (3, 'Three') 

SELECT * From @Inserted FOR XML RAW('data'), ELEMENTS XSINIL, TYPE