NOT LIKE ile dinamik SQL, herhangi bir nedenle iletilen parametreyi kabul etmiyor. Parametre içinde dinamik çağrıya geçmez ve buradaki dizeyiSQL parametresi DEĞİL GİBİ dinamik sql
ile oluşturuyorsa, bu çağrı silme işleminin NOT LIKE'ındaki @noteText parametresi için çalışmadığından geçici masadan her şeyi silmeyi bitirir. Apostrophes sözcükleri, geçersiz bir dize teklifi için dinamik olarak atarlarken bina olarak iletildiğinde çalışmak için aşağıdakine ihtiyacım var. Parametre @notetext ve dinamik sql bu benzediği zaman (kelime içinde kesme işareti olmadığında)
declare @bsearchbody bit=1
declare @bsearchtitle bit =0
declare @notetext varchar(10)='that''s'
create table #matched(id int,note varchar(800),title varchar(800))
INSERT INTO #matched
select 1,'this is just a test. that''s fun.','test1'
UNION ALL
SELECT 2,' note on the ID','the is just a title'
UNION ALL
SELECT 3,'I watched basketball last night','basketball type'
declare @vchsql nvarchar(1000)=N'
DELETE from #matched
WHERE 1=1 AND (' + CASE WHEN @bSearchBody=1 THEN 'ISNULL(note,'''') NOT LIKE ''%@noteText%''' ELSE '' END +
CASE WHEN @bSearchBody=1 AND @bSearchTitle=1 THEN ' AND ' ELSE '' END +
CASE WHEN @bSearchTitle=1 THEN 'ISNULL(title,'''') NOT LIKE
''%@noteText%''' ELSE '' END +
')'
print @vchsql
exec sp_executesql @vchsql,N'@notetext varchar(10)',@notetext
komut çalışır.
declare @bsearchbody bit=1
declare @bsearchtitle bit =0
declare @notetext varchar(10)='test'
create table #matched(id int,note varchar(800),title varchar(800))
INSERT INTO #matched
select 1,'this is just a test.','test1'
UNION ALL
SELECT 2,' note on the ID','the is just a title'
UNION ALL
SELECT 3,'I watched basketball last night','basketball type'
declare @vchsql nvarchar(1000)=N'
DELETE from #matched
WHERE 1=1 AND (' + CASE WHEN @bSearchBody=1 THEN 'ISNULL(note,'''') NOT LIKE ''%'+ @noteText+ '%''' ELSE '' END +
CASE WHEN @bSearchBody=1 AND @bSearchTitle=1 THEN ' AND ' ELSE '' END +
CASE WHEN @bSearchTitle=1 THEN 'ISNULL(title,'''') NOT LIKE ''%@noteText%''' ELSE '' END +
')'
print @vchsql
exec sp_executesql @vchsql,N'@notetext varchar(10)',@notetext
bir metin LIKE' 'saklıdır karakterleri içeren beklendiği gibi (örneğin' []% _ ') geçirilen davranır duruma geldiğinde unutmayın @ noteText. – Lucero