插入查询,其中一个字段是动态值列表

时间:2013-10-23 19:25:41

标签: sql sql-server

我正在寻找解决插件查询的挑战,其中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.

我很感激有关这个主题的一些见解,谢谢。

2 个答案:

答案 0 :(得分:0)

好吧,你没有说如何获得字符串列表,但通常你可以动态创建一个SQL字符串并执行它:

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

答案 1 :(得分: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?