2017-03-29 5 views
1

私は現在、次のSQLクエリを実行して立ち往生しています:SQL Server 2008の結果の文字列置換 - マルチ識別子

SELECT 
    c.[DeviceName], 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'CFRM-Server%' FOR XML PATH('')),1,3,'') AS 'CFRM', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'Communication Module%' FOR XML PATH('')),1,3,'') AS 'Communication Module', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'GEBIT-Commons-Java%' FOR XML PATH('')),1,3,'') AS 'Gebit Commons Java', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'GEBIT-Commons_JBOSS%' FOR XML PATH('')),1,3,'') AS 'Gebit Commons JBOSS', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'Mobile Store%' FOR XML PATH('')),1,3,'') AS 'Mobile Store', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'NEWPOSS-Store-Server%' FOR XML PATH('')),1,3,'') AS 'NEWPOSS', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'Store Portal - Complete%' FOR XML PATH('')),1,3,'') AS 'Store Portal', 
    STUFF((SELECT ' + ' + sw.[SuiteName] FROM [dbo].[AppSoftwareSuites] as sw where sw.[Computer_Idn] = c.[Computer_Idn] AND sw.[SuiteName] like 'Store S&R Services%' FOR XML PATH('')),1,3,'') AS 'SSR' 
FROM 
    [dbo].[Computer] as c WITH (NOLOCK) 
WHERE 
    c.[DeviceName] LIKE '%STL01' 
ORDER BY 
    c.[DeviceName] ASC; 

出力は結構ですが、それはデータベースに(「SSR」の)1つの製品と思われます壊れた出力( '& R Services xx.xx.xx'の代わりに 'Store S & R Services')につながる「&」文字があります。

出力で文字列置換を実行する可能性はありますか?

「For XML」の理由は、データベース内のDeviceNameごとに2つのエントリが存在するために空の結果になるためです。

すべてのヘルプは高く評価され:)

答えて

0

はこれを見て持っている:

DECLARE @teststring VARCHAR(100)='This is for test & show'; 

SELECT(SELECT ' + ' + @teststring FOR XML PATH('')); 

SELECT((SELECT ' + ' + @teststring FOR XML PATH(''),TYPE).value('.','nvarchar(max)')); 

二つの結果は次のとおりです。

ほとんどの場合「<で禁止された文字で FOR XMLを(使用
+ This is for test &amp; show 
+ This is for test & show 

>および& ')は、エスケープエンティティにつながります。 XMLは、メタ・セマンティクスを持っているため、これらの文字を使用できません。改行や多くの外国文字などのトラブルにつながることができますより多くの文字があります

...

簡単な解決策:2行目に示すように、あなたのSELECT ... FOR XML ...をラップし、value()を介して内部値を読みます方法。これはエンティティを元の文字に暗黙的に再コーディングします。

関連する問題