2017-07-19 91 views
0

我在插入語句時動態插入數據時有些疑惑,所以只想得到你們的幫助。我必須做多個插入語句,基於下面兩個不同的標準,大約1500條記錄只是1個插入語句的一個樣本。 現在在執行插入語句時,我想動態分配USERID和ROLEid的2列,您可以在下面的查詢中看到這兩列。 因此,例如,(100個不同的)userid IN(500個不同的用戶標識)和角色標識。在檢查記錄是否已經存在時動態插入表

Insert into userrolelist (Userid, Roleid, IsDefault, EffectiveStart, 
EffectiveEnd, Clientid, LastmodifiedUserId, LastmodifiedTimestamp) 
Values (161514,1011,1,'2016-01-21 00:00:00.001',Null,16785,0,'2016-01-21 
00:00:00.001') 

我肯定是有辦法做到基於2個不同標準的,我只是困惑,我怎麼能做到這一點的動態插入。主要還因爲對於插入前的每個條件,我需要檢查表中是否存在userid + roleid組合。因爲如果我不檢查它,並且仍然執行插入操作,它將引發錯誤,因爲存在基於2個字段的約束。

任何有關此事的幫助將不勝感激。如果問題不是很清楚,請告訴我,如果需要,我可以添加更多解釋。謝謝。

+0

您可以使用單個select語句執行多個插入操作,該語句還會檢查表中是否存在您要插入的userid/roleid組合。但如果沒有樣本數據(比您提供的單行更多),就很難具體說明具體情況。 – ZLK

+0

@ZLK - 我可以嘗試爲您獲取示例數據的屏幕截圖。你可以給我一些關於如何檢查多條件select語句中已經存在的想法嗎?像一個用戶ID +角色編號 –

+1

好吧,讓我們說,我基於另一個表插入到一個表中。我可能會做一些像'INSERT INTO myTable(column1,column2 ...)SELECT column1,column2 ... FROM myOtherTable AS WHERE NOT EXISTS(SELECT 1 FROM myTable WHERE column1 = O.column1 AND column2 = O.column2); '或者類似的東西。如有必要,我可以在select語句的條件中添加其他條件,並在必要時更改插入case語句的內容。 – ZLK

回答

1

您不會說您的用戶ID和角色ID列表來自哪裏,但是由於您爲每個用戶ID指定了不同的數字,因此我認爲它們是單獨的列表,而不是單個列表對。我假設它們分別存儲在名爲userlistrolelist的表中。然後,你可以做插入如下:

insert into userrolelist 
    (Userid, Roleid, IsDefault, EffectiveStart, EffectiveEnd, 
    Clientid, LastmodifiedUserId, LastmodifiedTimestamp) 
select 
    userid, roleid, 
    1,'2016-01-21 00:00:00.001',Null,16785,0, 
    '2016-01-21 00:00:00.001' 
from 
    (select userid, roleid 
    from userlist 
     cross join rolelist 
    ) as userrole 
where 
    not exists (select 1 from userrolelist as ur where ur.userid=userrole.userid and ur.roleid=userrole.roleid); 

子查詢構建所有可能的對用戶和角色的列表,所以如果你已經有對的列表,你可以簡單地使用到位的子查詢。

+0

您的解決方案非常完美。 –

相關問題