2

我有字符串格式的输入值(用逗号分隔)。

customerID = "1,2,3,4,5"

如何将这些值插入到cutomerID临时客户表的列中?

4

3 回答 3

1

实现此目的的一种方法是将要插入的值保存为 CSV。

然后创建一个临时表:MyTable

使用以下 TSQL 批量插入 CSV 的内容。确保更改文件路径。最后,运行注释掉的 select 语句来验证您的导入是否成功。

请注意,FIRSTROW 参数指定要加载的第一行的编号。默认为指定数据文件中的第一行。可能需要更改此值以适合 CSV 的布局。

创建表 MyTable ( CustomerID varchar(5) )

SET QUOTED_IDENTIFIER OFF

声明@SQL varchar(2000)、@path varchar(500)

SET @path = 'C:\Users\VikrantShitole\Desktop\Test.csv'

SET @SQL = "BULK INSERT MyTable"
    + " FROM '" +   @path + "'"
    + " WITH ("
    + " FIELDTERMINATOR = ','"
    + " ,ROWTERMINATOR = '\n'"
    + " ,FIRSTROW = 2 "
    + ")"

EXEC(@SQL)

-- 从我的表中选择 *

于 2013-06-24T16:19:01.027 回答
1

试试这个——

询问:

DECLARE @customerID VARCHAR(20)
SELECT @customerID = '1,2,3,4,5'

SELECT customerID = t.c.value('@s', 'INT')
FROM (
    SELECT field = CAST('<t s = "' + 
          REPLACE(
                 @customerID + ','
               , ','
               , '" /><t s = "') + '" />' AS XML) 
) d
CROSS APPLY field.nodes('/t') t(c)
WHERE t.c.value('@s', 'VARCHAR(5)') != ''

输出:

customerID
-----------
1
2
3
4
5
于 2013-06-25T05:19:17.417 回答
1

谢谢德瓦特。这是另一种替代解决方案。谢谢大家帮助我。

    DECLARE @customerID varchar(max) = Null ;

  SET @customerID= '1,2,3,4,5'


     DECLARE @tempTble Table (
            customerID varchar(25) NULL);


while len(@customerID ) > 0
begin
  insert into @tempTble (customerID ) values(left(@customerID , charindex(',', @customerID +',')-1))
  set @customerID = stuff(@customerID , 1, charindex(',', @customerID +','), '')
end

select * from @tempTble
于 2013-06-27T16:51:25.730 回答