2010-01-05 47 views
0

出於某種原因,我覺得我正在以這種痛苦的方式進行討論。 我有一個INSERT xml列表。我使用XML是因爲我需要傳入多個動態值。由於我們正在保存活動,因此我已經擁有該ID。我不知道的是Group或Room ID,所以我使用XML來傳遞一個數據表。是否可以使用XML數據類型作爲DataTable?

下面是一個例子INSERT部分:

IF @eventGroupTagRoomListInsert IS NOT NULL 
    BEGIN 
     INSERT INTO EventGroupTagRoomLink(EventID, RoomID, GroupTagID, IsDeleted, LastModifiedBy, SessionID) 
      SELECT 
       @eventID AS EventID, 
       ParamValues.Id.query('RoomId').value('.', 'int') AS RoomID, 
       ParamValues.Id.query('GroupTagID').value('.', 'int') AS GroupTagID, 
       0 AS IsDeleted, 
       @lastModifiedBy AS LastModifiedBy, 
       @sessionId AS SessionID 
      FROM @eventGroupTagRoomListInsert.nodes('/Entities/entity') AS ParamValues(ID) 
     IF @@ERROR <> 0 GOTO ERR_HANDLER 
    END 

是否有清潔的方式做到這一點?

回答

2

我會說是,可以接受。

在2008年SQL理論上你有Table Valued Parameters這可能是簡單,因爲語法至少:

INSERT INTO EventGroupTagRoomLink 
    (EventID, RoomID, GroupTagID, IsDeleted, LastModifiedBy, SessionID) 
SELECT EventID, RoomID, GroupTagID, IsDeleted, LastModifiedBy, SessionID 
FROM @eventGroupTagRoomTVP 

但是向後兼容性問題(沒有2005年的工作)和相當不友好的方式之間呈現TVP to ADO.Net (必須是一個數據表或DbDataReader,不會接受例如一個linq查詢表達式)我不確定我是否會轉向基於XML的TVP。

2

這種方法沒有問題。

我用它在幾個地方,因爲它是一個有效的wayx(尤其是在SQL Server 2005 +)來處理數組,並列出

Erland and his famous "Arrays and Lists" article

如果你讀它,並測試過,XML是通常是最快的「獨立」(不需要CLR)方法

相關問題