2013-10-23 70 views
0

我正在尋找解決插入查詢的問題,其中action_key是一個動態的字符串列表。 cust_name和action字段對於每個新行都是相同的,但action_key將根據列表中有多少個操作鍵而改變。例如:插入查詢,其中一個字段是動態值列表

INSERT INTO [table_name] (cust_name, action, action_key) VALUES (Bob, Approve, ApproveId1) 
INSERT INTO [table_name] (cust_name, action, action_key) VALUES (Bob, Approve, ApproveId2) etc. 

我很感謝關於此主題的一些見解,謝謝。

+0

所以投入將是「約翰尼建設」,「ChargeAccount」,「木|水泥|指甲|工具」,你想插入四行成[表名]用「 Johnny Construction'和'ChargeAccount'分別代表所有四行的cust_name和action,'Wood','Cement','Nails'和'Tools'分別排列在自己的行中? –

+0

是的,這是正確的。 –

+0

action_key的分隔符是什麼? –

回答

0

你必須發揮它,但基於你的XML結構輸入,這是我處理解析的方式。

Declare @cust_name Varchar(50), 
     @action Varchar(50), 
     @action_key Varchar(1000) 

Select @cust_name = 'Bob', 
     @action = 'Approve', 
     @action_key = '<action_keys><action_key>ApproveId1</action_key><action_key>ApproveId2</action_key><action_key>ApproveId3</action_key><action_key>ApproveId4</action_key></action_keys>' 


Select @cust_name, 
     @action, 
     n.r.value('.', 'varchar(50)') 
From (Select Cast(@action_key As Xml)) As s(XMLCol) 
Cross Apply s.XMLCol.nodes('action_keys/action_key') as n(r) 

參考:How Do I Split a Delimited String in SQL Server Without Creating a Function?

0

嘛,你不說你怎麼得到字符串列表,但通常你可以動態地創建一個SQL字符串,然後執行它:

EXEC ('INSERT INTO [table_name] ' + 
     '(cust_name, action, ' + action_key + ') ' + 
     'VALUES (''Bob'', ''Approve'', ''ApproveId1'')') 
+0

該列表將以C#字符串列表形式出現。 –

相關問題