2012-02-06 24 views
7

Msg 1086, Cấp 15, Tiểu bang 1, Dòng 20 Mệnh đề FOR ​​XML không hợp lệ trong dạng xem, hàm nội tuyến, bảng dẫn xuất và truy vấn con khi chúng chứa toán tử đã đặt. Để làm việc xung quanh, hãy bọc SELECT chứa toán tử set bằng cách sử dụng cú pháp bảng dẫn xuất và áp dụng FOR XML trên đầu trang của nó.Sử dụng UNION TẤT CẢ trong đường dẫn STUFF/XML

tôi nhận được lỗi này khi tôi chạy này:

SELECT 
    STUFF((
    SELECT 1 
    UNION ALL 
    SELECT 2 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 

hoạt động tốt khi tôi chạy này (mà không Liên minh ALL)

SELECT 
    STUFF((
    SELECT 1 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 

Bất kỳ gợi ý tại sao UNION ALL Không làm việc, hoặc làm thế nào để làm cho nó hoạt động bên trong STUFF()?

Trả lời

13

Có một giải pháp đơn giản cho điều đó, bạn nên bọc truy vấn công đoàn của mình (hoặc bất kỳ bảng có nguồn gốc nào cho vấn đề đó) bằng một lựa chọn khác. Làm điều này và sau đó tiếp tục sintax thường:

select * from 
(
SELECT 1 as I 
UNION ALL 
SELECT 2 as J 
) as K 

Something như thế này là những gì bạn đang tìm kiếm:

SELECT STUFF((
    select * from(

    SELECT * from dbo.Table1 as I 
    UNION ALL 
    SELECT * from dbo.Table2 as j 
    ) as k 
    FOR XML PATH('') 
    ),1,0,'') 

tôi đã kiểm tra và nó hoạt động hoàn hảo

+1

Đó dường như làm việc, cảm ơn! –

+0

Bí danh 'I' và' J' là gì? – alzaimar

+1

Tôi tin rằng chúng không cần thiết, tôi đặt chúng trong trường hợp. Nếu bạn đặt chúng, bạn có thể tham khảo bảng dbo.Table1 như j trong tài liệu tham khảo trong tương lai. Tuy nhiên, k IS CẦN vì nếu nó không có ở đó, sẽ không có cách nào để chỉ các cột của truy vấn phụ đó. – Gaspa79

Các vấn đề liên quan