2013-06-24 37 views
2

我輸入的值格式爲字符串(用逗號分隔)。將分隔逗號值插入到sql表中

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

我如何可以將這些值轉換成臨時的客戶表的列cutomerID

+0

你可以使用函數返回一個包含整數的表,例如[F_SplitAsIntTable](http://stackoverflow.com/a/16993267/1699210) – bummi

+0

您是否有腳本語言可用於從此數據準備正確的CSV文件或SQL語句? – tadman

+1

爲什麼你不想把它作爲一個字符串插入? – Stephan

回答

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 
1

完成此操作的一種方法是將要插入的值保存爲CSV。

然後創建一個臨時表:MyTable的

使用以下TSQL批量插入您的CSV的內容。確保更改文件路徑。最後,運行註釋掉的select語句來驗證導入是否成功。

請注意,FIRSTROW參數指定要加載的第一行的編號。默認值是指定數據文件中的第一行。此值可能需要進行更改以適合CSV的佈局。

CREATE TABLE MyTable的 (客戶ID VARCHAR(5))

SET QUOTED_IDENTIFIER OFF

DECLARE @SQL VARCHAR(2000), @path VARCHAR(500)

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

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

EXEC(@SQL) 

- SELECT * FROM MyTable的

+0

@Vikrant Shitole - 爲您工作? –

+0

感謝您的解決方案,但我不想將值存儲在CSV文件中。 –

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 
+0

感謝您的解決方案。 –

+0

不客氣@Vikrant Shitole。 – Devart