2014-09-30 126 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