gpt4 book ai didi

sql - 如何将逗号分隔的 NVARCHAR 转换为 SQL Server 2005 中的表记录?

转载 作者:行者123 更新时间:2023-12-04 00:27:44 26 4
gpt4 key购买 nike

我有一个以逗号分隔的 id 列表,例如:

 1,17,25,44,46,67,88

我想将它们转换为表记录(转换为临时表),例如
#tempTable

number_
--------
1
17
25
44
46
67
88

可以使用 功能 ,一个表值的?

为什么我想要这个?我想用于 INNER JOIN子句(进入存储过程)与另一个表,如:
SELECT a,b,c FROM T1
INNER JOIN functionNameWhichReturnsTable
ON functionNameWhichReturnsTable.number_ = T1.a

我无法使用 IN因为我将使用接受 NVARCHAR 类型参数的存储过程。该参数将提供 ID 列表。

谢谢

最佳答案

separate comma separated values and store in table in sql server 的可能重复.

请尝试来自 Comma-Delimited Value to Table 的精确的:

CREATE FUNCTION [dbo].[ufn_CSVToTable] ( @StringInput VARCHAR(8000), @Delimiter nvarchar(1))
RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
AS
BEGIN

DECLARE @String VARCHAR(10)

WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))

INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END

RETURN
END
GO

使用 XML 以其他方式检查需求:
DECLARE @param NVARCHAR(MAX)
SET @param = '1:0,2:1,3:1,4:0'

SELECT
Split.a.value('.', 'VARCHAR(100)') AS CVS
FROM
(
SELECT CAST ('<M>' + REPLACE(@param, ',', '</M><M>') + '</M>' AS XML) AS CVS
) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a)

关于sql - 如何将逗号分隔的 NVARCHAR 转换为 SQL Server 2005 中的表记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com