我使用動態SQL寫的存儲過程:如何在存儲過程的動態SQL中使用LIKE?
create procedure [dbo].[SearchProduct]
(@ProductId int = null, @ProductName nvarchar(50) = null)
as
declare @SqlStr nvarchar(max)
declare @ParaList nvarchar(2000)
set @SqlStr = 'select p.* from dbo.Product where (1=1) '
if @ProductName is not null
set @SqlStr = @SqlStr + 'and(p.ProductName like '''%' + @ProductName2+'%''')'
set @ParaList='@ProductId2 int , @ProductName2 nvarchar(50)'
EXECUTE SP_EXECUTESQL @SqlStr,@ParaList,@ProductId,@ProductName
但我得到一個錯誤:如果我改變
Error in "Like operator" : The data types varchar and varchar are incompatible in the modulo operator.
:
set @SqlStr = @SqlStr + 'and(p.ProductName like ''%' + @ProductName2+'%'')'
我得到:
@ProductName2 not declare.
感謝您的建議,@Sufyan。 1>我修好了。如果我有2個單引號:錯誤(必須聲明@ ProductName2)。 2>和3>我這樣做跟着你。 4>動態Sql不好,但我想搜索多值和優化算法:使用動態SQL。 –
@ Mr.Ken最糟糕的是,通過sp_executesql封裝查詢。您可以隱藏整個陳述,並可以明確指示變量是如何讀取和清理的。 –
我使用動態sql因爲我需要在數據庫中搜索多個值。你有另一種最佳算法來解決這個問題嗎? @clifton_h –