次のコードは、コンマで区切られているかどうかに関係なく文字列を取得し、その部分が問題なく機能するテーブル (#tmpFullanme) に配置することになっています。2 番目の部分は、入力内容に基づいて % 記号の有無にかかわらず、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 = '%'
「マルチパート識別子 "#tmpFullname.Item" をバインドできませんでした」ため、PRINT 出力に到達できません。#tmpFullname.Item を '#tmpFullname.Item に変更すると、通過して何も返されませんが、そのテーブルの問題を除いてクエリが正しいことが示されます。
SELECT d.* FROM defendants_ALL d, #tmpFullname WHERE d.combined_name LIKE '%' + '#tmpFullname.Item' + '%'
これを動的クエリにして、ステートメントを LIKE から IN などに変更できるようになるまでは、非常にうまく機能していたことに注意してください。