2012-02-06 16 views
7

Msg 1086, Level 15, State 1, Line 20 FOR XML cümlesi, bir set işleci içerdiklerinde görünümler, satır içi işlevler, türetilmiş tablolar ve alt sorgular için geçersizdir. Etrafta çalışmak için, türetilmiş bir tablo sözdizimini kullanarak bir set operatörünü içeren SELECT'i sarın ve bunun üstüne FOR XML'i uygulayın. ben bu çalıştırdığınızdaUNION ALL öğesinin STUFF/XML Yolu içinde kullanılması

bu hatayı alıyorum: i (Birlik ALL olmadan) bu çalıştırdığınızda

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

çalışıyor

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

UNION ALL işe, ya da nasıl yapmaz neden Herhangi önerileri STUFF() içinde çalışmak için?

cevap

13

Bunun için basit bir çözüm var, sendika sorgunuzu (veya bu konuyla ilgili herhangi bir türetilmiş tabloyu) başka bir seçimle sarmalısınız. Bunu yapın ve daha sonra normal olarak SINTAX devam: Böyle

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

şey aradığınız budur: sayesinde kontrol ettim ve o iş gibi görünüyor Yani kusursuz

+1

çalışır

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,'') 

! –

+0

“I” ve “J” adlı takma adlar nelerdir? – alzaimar

+1

İhtiyacı olmadıklarına inanıyorum, onları tam olarak içine koydum. Eğer bunları koyarsanız, ileride referans olarak dbo.Table1 tablosuna j olarak başvurabilirsiniz. Bununla birlikte, K İHTİYACI çünkü orada olmasaydı, bu alt sorgunun sütunlarına başvurmanın bir yolu olmazdı. – Gaspa79