下面的代码应该采用一个可能是逗号分隔的字符串,也可能不是逗号分隔的字符串,并将其放入一个表(#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 = '%'
无法访问 PRINT 输出,因为“无法绑定多部分标识符“#tmpFullname.Item”。” 如果我将 #tmpFullname.Item 更改为 '#tmpFullname.Item 它会通过并且不返回任何内容,但它表明查询是正确的减去该表的问题。
SELECT d.* FROM defendants_ALL d, #tmpFullname WHERE d.combined_name LIKE '%' + '#tmpFullname.Item' + '%'
请注意,直到我把它变成一个动态查询,所以我可以将语句从 LIKE 更改为 IN 等它工作得很好。