我创建了将“Tracking Number”和“Company Name”作为输入参数的存储过程,并搜索所有相关记录。使用此程序,我可以输入以逗号(,
)分隔的多个“跟踪号”。
SQL函数“StringToTable”将所有“跟踪号”转换为表格格式。
这是我的存储过程:
CREATE PROCEDURE [dbo].[GetAllDashboardRecords]
@trakingNumber nvarchar(max) = null,
@companyName nvarchar(max) = null,
AS
BEGIN
SELECT DISTINCT *
FROM [Packets]
WHERE
(@trakingNumber IS NULL OR
TrackingNo IN (SELECT * FROM dbo.StringToTable(@trakingNumber)))
AND (@companyName IS NULL OR Users.CompanyName = @companyName)
ORDER BY
TrackingNo DESC
END
我的SQL函数:
CREATE FUNCTION [dbo].[StringToTable]
(@InStr VARCHAR(MAX))
RETURNS @TempTab TABLE (id int not null)
AS
BEGIN
;-- Ensure input ends with comma
SET @InStr = REPLACE(@InStr + ',', ',,', ',')
DECLARE @SP INT
DECLARE @VALUE VARCHAR(1000)
WHILE PATINDEX('%,%', @INSTR ) <> 0
BEGIN
SELECT @SP = PATINDEX('%,%',@INSTR)
SELECT @VALUE = LEFT(@INSTR , @SP - 1)
SELECT @INSTR = STUFF(@INSTR, 1, @SP, '')
INSERT INTO @TempTab(id)
VALUES (@VALUE)
END
RETURN
END
现在我想和“公司名称”一样。因此,当我输入以逗号分隔的多个公司时,我的程序应该返回与这些公司相关的所有记录(假设“公司名称”在表中不包含逗号)。
有没有办法做到这一点?