2014-10-07 93 views
-1

我想通過一個逗號分隔的字符串,如:「101:string1,102:string2」到一個存儲過程,並創建一個臨時表出來。臨時表將有兩列,一個整數和一個字符串。這個例子將有兩行。逗號分隔行,冒號分隔兩列。任何人都知道我可以做到這一點?我正在使用SQL Server。提前致謝!從逗號分隔值與多個列創建臨時表

編輯:順便說一下,我不問如何創建臨時表,只有如何創建函數。

+0

你確定一個功能是你想要什麼?你不能在一個函數內創建一個#temp表。 – 2014-10-07 17:26:58

+0

您的問題主要是關於創建表格還是關於分割字符串?如果後者,看看這個問題是否有所幫助:http://stackoverflow.com/questions/9589282/converting-comma-delimited-string-to-multiple-columns-in-sql-server – 2014-10-07 17:37:24

回答

5

您可以嘗試Table-Valued Function而不是臨時表。事情是這樣的:

CREATE FUNCTION ListToTable 
( 
    @list nvarchar(4000) 
) 
RETURNS @return TABLE 
(
    n int, 
    s nvarchar(15) 
) 
AS 
BEGIN 
    SET @list = NULLIF(ltrim(rtrim(@list)),'') 

    DECLARE @xml AS XML = CAST('<root><row><n>' + 
           REPLACE(REPLACE(@list, 
            ',', '</s></row><row><n>'), 
            ':', '</n><s>') + 
           '</s></row></root>' AS XML) ; 

    INSERT INTO @return (n, s) 
     SELECT root.row.value('n[1]', 'int') 
      , root.row.value('s[1]', 'nvarchar(4000)') 
     FROM @xml.nodes('/root/row') as root(row) 

    RETURN 
END 

用法:

select * from dbo.ListToTable('101:string1,102:string2') 

輸出:

n   s 
----------- --------------- 
101   string1 
102   string2 
+0

是否有這樣的不一致的原因: 'n [1]'和'./s [1]'?爲什麼不用'。/'前綴或在兩種情況下都避免使用前綴? – 2014-10-08 06:06:56

+0

我修正了不一致之處。謝謝!我正在嘗試不同的東西,'./'是一個剩下的。 – wdosanjos 2014-10-08 14:33:46