基本上这就是我想要实现的目标。我在我的存储过程中接收UserId和ProductId作为参数,它将这些值插入到名为UserProduct
的表中。 ProductId
以逗号分隔的数组参数形式提供,UserId
作为单个整数值提供。
以下是我希望在此表中的select语句之后实现的结果集示例。这可以实现吗?提前致谢。
UserId ProductId
-------------------
817 7
817 5
817 33
798 6
798 12
798 2
798 4
888 5
... ...
答案 0 :(得分:1)
请找到这个。
DECLARE @valueList varchar(8000)
DECLARE @pos INT
DECLARE @len INT
DECLARE @value varchar(8000)
SET @valueList = 'aa,bb,cc,f,sduygfdctys,w,e,r,t,sd sdf sdf,yyy yyy yy,'
--the value list string must end with a comma ','
--so, if the last comma it's not there, the following IF will add a trailing comma to the value list
IF @valueList NOT LIKE '%,'
BEGIN
set @valueList = @valueList + ','
END
set @pos = 0
set @len = 0
WHILE CHARINDEX(',', @valueList, @pos+1)>0
BEGIN
set @len = CHARINDEX(',', @valueList, @pos+1) - @pos
set @value = SUBSTRING(@valueList, @pos, @len)
--SELECT @pos, @len, @value /*this is here for debugging*/
PRINT @value
--Here is you value
--DO YOUR STUFF HERE
--DO YOUR STUFF HERE
--DO YOUR STUFF HERE
--DO YOUR STUFF HERE
--DO YOUR STUFF HERE
set @pos = CHARINDEX(',', @valueList, @pos+@len) +1
END
答案 1 :(得分:0)
您可以在TSQL
下方尝试。
-- supposing @ProductID comma seperated values - varchar
DECLARE @ix INT
DECLARE @value varchar(25)
WHILE PATINDEX('%,%', @ProductId) <> 0
BEGIN
SELECT @ix= PATINDEX('%,%',@ProductId)
SELECT @value= LEFT(@ProductId, @ix- 1)
SELECT @ProductId= STUFF(@ProductId, 1, @ix, '')
INSERT INTO table (UserId,ProductId) VALUES(@UserId, @value)
END
实际上,您应该考虑将productID作为数组。