我想通過一個逗號分隔的字符串,如:「101:string1,102:string2」到一個存儲過程,並創建一個臨時表出來。臨時表將有兩列,一個整數和一個字符串。這個例子將有兩行。逗號分隔行,冒號分隔兩列。任何人都知道我可以做到這一點?我正在使用SQL Server。提前致謝!從逗號分隔值與多個列創建臨時表
編輯:順便說一下,我不問如何創建臨時表,只有如何創建函數。
我想通過一個逗號分隔的字符串,如:「101:string1,102:string2」到一個存儲過程,並創建一個臨時表出來。臨時表將有兩列,一個整數和一個字符串。這個例子將有兩行。逗號分隔行,冒號分隔兩列。任何人都知道我可以做到這一點?我正在使用SQL Server。提前致謝!從逗號分隔值與多個列創建臨時表
編輯:順便說一下,我不問如何創建臨時表,只有如何創建函數。
您可以嘗試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
是否有這樣的不一致的原因: 'n [1]'和'./s [1]'?爲什麼不用'。/'前綴或在兩種情況下都避免使用前綴? – 2014-10-08 06:06:56
我修正了不一致之處。謝謝!我正在嘗試不同的東西,'./'是一個剩下的。 – wdosanjos 2014-10-08 14:33:46
你確定一個功能是你想要什麼?你不能在一個函數內創建一個#temp表。 – 2014-10-07 17:26:58
您的問題主要是關於創建表格還是關於分割字符串?如果後者,看看這個問題是否有所幫助:http://stackoverflow.com/questions/9589282/converting-comma-delimited-string-to-multiple-columns-in-sql-server – 2014-10-07 17:37:24