我的输入值格式为string(用逗号分隔)。
customerID = "1,2,3,4,5"
如何将这些值插入临时客户表的cutomerID
列?
答案 0 :(得分:1)
实现此目的的一种方法是将要插入的值保存为CSV。
然后创建一个临时表:MyTable
使用以下TSQL批量插入CSV的内容。确保更改文件路径。最后,运行注释掉的select语句以验证导入是否成功。
请注意,FIRSTROW参数指定要加载的第一行的编号。默认值是指定数据文件中的第一行。可能需要更改此值以适合CSV的布局。
创建表MyTable (CustomerID varchar(5))
SET QUOTED_IDENTIFIER OFF
DECLARE @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)
- SELECT * FROM MyTable
答案 1 :(得分: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
答案 2 :(得分:1)
谢谢Devart。这是另一种替代解决方案。谢谢大家的帮助。
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