拆分输入参数并在存储过程中输出一个table
Split input parameter and output a table in a stored procedure
我有一个要求,我得到一个字符串,例如“1500,4444,7777”。这些是产品的 ID。
现在我需要拆分这个输入,我也已经有了拆分功能。也尝试过使用循环。
拆分 ID 后,我需要为输入参数中发送的所有 ID 检索 ProductName 及其 GUID。我应该 return 来自 SP 的 ProductName 和 GUID 的列表,以便在 Web 方法中使用它。
产品 table 包含产品 GUID、产品名称和产品 ID。现在我必须根据 ID 检索 GUID 和名称。
我可以拆分产品 ID,获取产品名称,但现在我不知道如何将产品名称及其 GUID 添加到列表并发送。
请找到我试过的SP
CREATE PROCEDURE GetProductNamesByProductNumber
(@productNumberList nvarchar(max))
AS
BEGIN
SET NOCOUNT ON
DECLARE @Err int
DECLARE @pos int
DECLARE @len int
DECLARE @value varchar(8000)
DECLARE @prodName varchar(8000)
DECLARE @prodNames varchar(8000)
SET @productNumberList = @productNumberList + ','
SET @pos = 0
SET @len = 0
WHILE CHARINDEX(',', @productNumberList , @pos + 1) > 0
BEGIN
SET @len = CHARINDEX(',', @productNumberList , @pos + 1) - @pos
SET @value = SUBSTRING(@productNumberList , @pos, @len)
SELECT
@prodName = ProductName FROM Product
WHERE ProductNumber = @value
SET @pos = CHARINDEX(',', @productNumberList , @pos + @len) + 1
IF @prodNames <> ''
SET @prodNames += ',' + @prodName
ELSE
SET @prodNames= @prodName
END
DECLARE @output_table TABLE (
ProductName nvarchar(max)
)
INSERT @output_table
SELECT
*
FROM SplitString(@prodNames, ',')
SELECT * FROM @output_table
SET @Err = @@Error
RETURN @Err
END
GO
拆分输入参数后,将其添加到临时 table 说
create table #tempProductID( productid int)
然后加入您的产品 table
SELECT Product.ProductID, Product.GUID, Product.Name
FROM Product INNER JOIN #tempProductID
ON Product.ProductID = #tempProductID.ProductID
像这样使用拆分 TBV 函数
CREATE FUNCTION [dbo].[udf_SplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
然后您可以将上述功能与 PRODUCT table 和 return list/table 结合起来,例如
CREATE PROCEDURE GetProductNamesByProductNumber
(@productNumberList nvarchar(max))
AS
BEGIN
SET NOCOUNT ON
DECLARE @Err int
SELECT
ProductName, ProductGuid, ProductNumber FROM Product
INNER JOIN ( SELECT Value FROM dbo.Split(@productNumberList, ',') ) a ON p.ProductNumber = a.Value
END
我有一个要求,我得到一个字符串,例如“1500,4444,7777”。这些是产品的 ID。 现在我需要拆分这个输入,我也已经有了拆分功能。也尝试过使用循环。
拆分 ID 后,我需要为输入参数中发送的所有 ID 检索 ProductName 及其 GUID。我应该 return 来自 SP 的 ProductName 和 GUID 的列表,以便在 Web 方法中使用它。
产品 table 包含产品 GUID、产品名称和产品 ID。现在我必须根据 ID 检索 GUID 和名称。
我可以拆分产品 ID,获取产品名称,但现在我不知道如何将产品名称及其 GUID 添加到列表并发送。
请找到我试过的SP
CREATE PROCEDURE GetProductNamesByProductNumber
(@productNumberList nvarchar(max))
AS
BEGIN
SET NOCOUNT ON
DECLARE @Err int
DECLARE @pos int
DECLARE @len int
DECLARE @value varchar(8000)
DECLARE @prodName varchar(8000)
DECLARE @prodNames varchar(8000)
SET @productNumberList = @productNumberList + ','
SET @pos = 0
SET @len = 0
WHILE CHARINDEX(',', @productNumberList , @pos + 1) > 0
BEGIN
SET @len = CHARINDEX(',', @productNumberList , @pos + 1) - @pos
SET @value = SUBSTRING(@productNumberList , @pos, @len)
SELECT
@prodName = ProductName FROM Product
WHERE ProductNumber = @value
SET @pos = CHARINDEX(',', @productNumberList , @pos + @len) + 1
IF @prodNames <> ''
SET @prodNames += ',' + @prodName
ELSE
SET @prodNames= @prodName
END
DECLARE @output_table TABLE (
ProductName nvarchar(max)
)
INSERT @output_table
SELECT
*
FROM SplitString(@prodNames, ',')
SELECT * FROM @output_table
SET @Err = @@Error
RETURN @Err
END
GO
拆分输入参数后,将其添加到临时 table 说
create table #tempProductID( productid int)
然后加入您的产品 table
SELECT Product.ProductID, Product.GUID, Product.Name
FROM Product INNER JOIN #tempProductID
ON Product.ProductID = #tempProductID.ProductID
像这样使用拆分 TBV 函数
CREATE FUNCTION [dbo].[udf_SplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
然后您可以将上述功能与 PRODUCT table 和 return list/table 结合起来,例如
CREATE PROCEDURE GetProductNamesByProductNumber
(@productNumberList nvarchar(max))
AS
BEGIN
SET NOCOUNT ON
DECLARE @Err int
SELECT
ProductName, ProductGuid, ProductNumber FROM Product
INNER JOIN ( SELECT Value FROM dbo.Split(@productNumberList, ',') ) a ON p.ProductNumber = a.Value
END