下面的代碼應該採用一個字符串,該字符串可以是或不是逗號分隔的,並將其放入表(#tmpFullanme)第二部分假設返回LIKE/NOT LIKE的所有值,根據輸入內容是否帶有%符號。我得到的錯誤是「多部分標識符」#tmpFullname.Item「不能界。」最好的猜測我是,它可能是超出了範圍?多部分標識符「#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’無法約束。’如果我將#tmpFullname.Item更改爲'#tmpFullname.Item它會通過並返回任何內容,但它顯示該查詢是正確的,減去該表的問題。
SELECT d.* FROM defendants_ALL d, #tmpFullname WHERE d.combined_name LIKE '%' + '#tmpFullname.Item' + '%'
請注意,直到我做了這個動態查詢,所以我可以更改語句從LIKE到IN等它工作得很好。
從錯誤消息,它看起來像它的O.K. '#tmpFullname',而不是'#tmpFullname.Item'。嘗試運行'select * from tempdb.sys.columns where object_id = object_id('tempdb ..#mytemptable');'(from [This StackOverflow answer](http://stackoverflow.com/a/756112/978917))和打印結果;那會顯示'#tmpFullname'中的列名。 – ruakh
我知道該表中的字段名稱是Item和Itemnumber。每次運行查詢時我運行SELECT * FROM #tmpFullname。這工作正常,如果它不是動態SQL。如果我只運行它沒有動態LIKE它工作正常。 – korrowan
我知道這就是你的期望;但SQL-Server似乎並不同意你的看法。 (是否有一些原因,你不想運行這個查詢?) – ruakh