我发送一个分隔字符串到'存储过程',最终将与IN语句一起使用来更新一些记录,所以我试图做的是创建一个'Table- Valued Function'将执行此转换并返回此更新语句中可用的表,但不确定如何执行此操作。将分隔字符串分解成临时表
有,打破了分隔字符串另一功能,但它不喜欢像它返回整个表,我真的不明白它的语法时才,它不是任何SQL我今天来之前翻过......
所以(生病发布下面的其他函数)我可以修改或使用此函数为这个分隔字符串中的任意数量的值或我需要想出另一种方法?
CREATE FUNCTION [dbo].[Split]
(
@String NVARCHAR(4000),
@Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)
使用此功能时得到生病类似下面
语法每个项目set @ID = (select Data from dbo.Split(@Params, '|') where ID = 1)
*****使用结果从给定的答案更新*******
DECLARE @pVals VARCHAR(MAX)
SET @pvals = '1,2,3,4,5'
DECLARE @tblDelimitedData TABLE (
[Data] INT NULL
)
INSERT INTO @tblDelimitedData(data)
SELECT data
FROM dbo.Split(@pvals, ',') s
WHERE ID >= 2
SELECT * FROM @tblDelimitedData
结果是2,3,4,5
完美谢谢!
有一个类似的问题在链接[这里]解决(http://stackoverflow.com/questions/36793821/to-convert-a-string-into-table-with-schema)。希望这可以帮助。 –
为什么不使用数据类型*设计*来存储多个值,如表值参数或XML,而不是将所有内容填充到一个字符串中,然后必须撤消它? –
@Damian_The_Unbeliever,这将被称为从正在开发的东西,目前通过分隔字符串存储过程在服务器上,它的好和简单,老实说SQL对我来说是相当新的,所以即时imging以坚持什么工作如此远远所以我不会在服务器端弄乱一些东西:) –