0

コードは次の場合を除いて正常に機能します

SELECT DISTINCT isnull(@FEATURE + ', ', ',') + Feature 
    FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] as rf2 where (rf2.roomid =   rf.roomid)
    for xml path('')), 

それは私に問題を与えています。最初のコンマを取り除く方法がわかりません。サブストリングを試しましたが、すべてのコンマが削除されます(selectステートメントに含まれているためだと思います)。COALESCE(@FEATURE +'、'、'')+ FEATUREを試し ましたが、結果は同じで、最後または最初にコンマがないか、余分なコンマが1つあります。

DECLARE @FEATURE VARCHAR(500) 
-- INSERT INTO BookableRooms IF NOT EXISTS ROOM NUMBER 
INSERT INTO dbo.BookableRooms_test (FK_Building_code,
                                    Room_num,Other_room_name,
                                    Capacity_from,
                                    Capacity_to,
                                    Accessiblity,AV_book_separate,Flooring_type,Features,
                                    Food_drink_allowed, Alcohol_allowed,Internet,
                                    [Owner],FK_BookingContact_ID,
                                    LCD_projector,Computer,FK_SpaceManager_code,Last_updated_date,Last_updated_by,SpecialFlag)
SELECT DISTINCT CASE
            WHEN rf.[Building Reference] is null or rf.[Building Reference] = '' THEN 'HH'
            ELSE rf.[Building Reference] 
        END,
        [ROOMID],[Description],
       (SELECT MIN(rf2.CAPACITY) FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] AS rf2 WHERE rf2.ROOMID = rf.ROOMID),
       (SELECT MAX(rf2.CAPACITY) FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] AS rf2 WHERE rf2.ROOMID = rf.ROOMID),  
       dbo.iszero([Wheelchair Accessible]), dbo.iszero(rf.[Separate AV]),dbo.isflat(rf.[Flat Floor]),
       (
        SELECT DISTINCT isnull(@FEATURE + ', ', ',') + Feature 
        FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] as rf2 where (rf2.roomid = rf.roomid)
        for xml path('')),
       dbo.iszero(rf.[Food and Drink]),dbo.iszero(rf.[Alcohol]),dbo.iszero(rf.[Room Internet]),
       'HH',5,
       dbo.iszero(rf.[Digital Projector]),dbo.iszero(rf.[Computer]),'HH',GetDate(),'System',dbo.iszero(rf.[Restricted])

 FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] as rf  where NOT EXISTS(
    SELECT 1 FROM dbo.BookableRooms_test b WHERE 
    b.Room_num = rf.ROOMID);
4

3 に答える 3

3

Stuffを使用しますが、サブクエリの外側にあります。

stuff ((SELECT DISTINCT ',' + Feature 
        FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] as rf2 
        WHERE (rf2.roomid = rf.roomid)
        for xml path('')), 1, 1, '')
于 2012-04-12T20:24:59.727 に答える
2

STUFF関数を使用して、先頭のコンマを削除します。

SELECT DISTINCT STUFF(',' + Feature 
    FROM [128.100.194.219, 1435].[EMSData].[dbo].[vOSLRoomFeatures] as rf2 where (rf2.roomid =   rf.roomid)
    for xml path('')),1,1,''), 
于 2012-04-12T20:22:32.670 に答える
0

あなたが何を達成しようとしているのかわかりません。私の推測が間違っていた場合、どのような状況でどのような結果が期待できるかを教えていただければ幸いです。

これを試して

CASE WHEN @FEATURE IS NULL THEN NULL ELSE @FEATURE + ', ' END
于 2012-04-12T20:18:16.777 に答える