具有多个ID

时间:2016-09-27 19:31:54

标签: sql sql-server stored-procedures sql-function

我创建了将“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

现在我想和“公司名称”一样。因此,当我输入以逗号分隔的多个公司时,我的程序应该返回与这些公司相关的所有记录(假设“公司名称”在表中不包含逗号)。

有没有办法做到这一点?

0 个答案:

没有答案