kor*_*wan 3 t-sql stored-procedures
下面的代码应该采用一个字符串,可以用或不用逗号分隔,并将其放入表(#tmpFullanme)中,该部分可以正常工作.第二部分假定根据输入内容返回所有与LIKE/NOT LIKE相关的值,包括或不包含%符号.我得到的错误是"多部分标识符"#tmpFullname.Item"无法绑定".我最好的猜测是它可能超出范围?
DROP PROCEDURE uspJudgments;
GO
CREATE PROCEDURE uspJudgments
@fullName varchar(100), @SrchCriteria1 varchar(15), @SrchCriteria2 varchar(15), @qualifier varchar(10)
AS
BEGIN
SELECT *
INTO #tmpFullname
FROM dbo.DelimitedSplit8K(@fullName, ',')
DECLARE @Query NVarChar(1024)
SET @Query = 'SELECT d.*' + ' FROM defendants_ALL d, #tmpFullname' +
' WHERE d.combined_name' + ' ' + @qualifier + ' ' + '''' + @SrchCriteria1 + '''' + ' + ' + '''' + #tmpFullname.Item + '''' + ' + ' + '''' + @SrchCriteria2 + ''''
END
EXEC sp_executesql @Query
PRINT(@Query)
IF OBJECT_ID('#tmpFullname', 'U') IS NOT NULL
DROP TABLE #tmpFullname
EXEC uspJudgments @qualifier = 'LIKE', @fullName = 'johnson', @SrchCriteria1 = '%', @SrchCriteria2 = '%'
Run Code Online (Sandbox Code Playgroud)
无法作为"多部分标识符"#tmpFullname.Item"无法绑定到PRINT输出." 如果我将#tmpFullname.Item更改为'#tmpFullname.Item它会通过并返回任何内容,但它显示查询是正确的,减去该表的问题.
SELECT d.* FROM defendants_ALL d, #tmpFullname WHERE d.combined_name LIKE '%' + '#tmpFullname.Item' + '%'
Run Code Online (Sandbox Code Playgroud)
请注意,在我将其设置为动态查询之前,我可以将语句从LIKE更改为IN等,它运行得非常好.
我设置了一个完整的测试,以获得正确的脚本,以获得您想要的结果.我还有一个SQL小提琴显示它是如何工作的. 注意您将要EXECUTE sp_executesql @Query在存储过程内运行
ALTER PROCEDURE uspJudgments @fullName varchar(100)
, @SrchCriteria1 varchar(15)
, @SrchCriteria2 varchar(15)
, @qualifier varchar(10)
AS
BEGIN
--Simulates your split function
SELECT *
INTO #tmpFullName
FROM
(
SELECT 'firstTest' AS Item
UNION ALL SELECT 'secondTest'
UNION ALL SELECT 'NotThere'
) AS t;
DECLARE @Query NVARCHAR(1024);
SELECT @Query = 'SELECT d.* '
+ ' FROM defendants_ALL d '
+ ' CROSS JOIN #tmpFullName AS t '
+ ' WHERE d.combined_name' + ' ' + @qualifier + ' '
+ '''' + @SrchCriteria1 + ''''
+ ' + ' + 't.Item' + ' + ' + '''' + @SrchCriteria2 + '''';
EXECUTE sp_executesql @Query;
END
EXECUTE uspJudgments
@fullName = 'does not matter'
, @SrchCriteria1 = '%'
, @SrchCriteria2 = '%'
, @qualifier = 'LIKE';
Run Code Online (Sandbox Code Playgroud)