2012-11-26 73 views
1

我剛開始添加寫入存儲過程到我的SQL庫,我敢肯定這是一個noob問題。在這種情況下,有人能指出我正確的方向嗎?如何使用like運營商而不是=運營商?這樣做的目的是要找到第3個通用號碼的開出一個潛在的5位數字的像存儲過程中的輸入參數操作符

存儲過程:

create proc dbo.MultipleDrugs (@condition varchar(50)) 
as 
SELECT *, 100.0 * round(SUM(numwithanxiety) OVER (partition BY sex)/cast(TotalSexCounts AS float), 4) overAllPercentByGender 
FROM (SELECT x.sex, injurylevel, SUM(sexandlevelcounts) OVER (partition BY x.sex) numByInjury, sum(sexandlevelcounts) AS numWithAnxiety, 
     100.0 * round(cast(sexandlevelcounts AS float)/SUM(sexandlevelcounts) OVER (partition BY x.sex), 4) AS percentWith, y.TotalSexCounts 
     FROM (SELECT sex, injurylevel, COUNT(*) AS sexAndLevelCounts 
      FROM (SELECT DISTINCT m.patid, m.sex, m.injurylevel 
       FROM members AS m INNER JOIN 
       icdClm AS ic ON ic.patid = m.PATID 
       --*****when I leave this operator as like and use 
       --*****equals in the exec statement it works 
       WHERE ic.icd LIKE @condition) t 
       GROUP BY sex, injurylevel) x INNER JOIN 
       (SELECT m.sex, COUNT(DISTINCT patid) TotalSexCounts 
       FROM members m 
       GROUP BY m.sex) y ON y.sex = x.sex 
       GROUP BY x.sex, x.injuryLevel, x.sexAndLevelCounts, y.TotalSexCounts) rr 
go 

這將運行,但我不能使用like操作

exec dbo.MultipleDrugs N'70700' 

這是我想要做的

exec dbo.MultipleDrugs like '707%' 
+0

你有沒有嘗試過:LIKE'%'+ @condition +'%'在你的sp? – Ric

+0

在您的exex調用中,您不需要類似的東西,只需在您的查詢中 – Limey

+0

然後在exec語法中保留「like」。 –

回答

2
exec dbo.MultipleDrugs N'707%' 
+0

看似簡單,當然也是我沒有嘗試過的唯一的東西。謝謝!我不認爲使用通配符運算符可以在exec語句中使用'like'來工作,但是這顯示了我所知道的 – wootscootinboogie

+0

您是否將通過代碼調用此代碼?如果你記得在你的字符串的開始/結尾添加「%」。 – Ric

0

改變你的SP,在發生以下情況:

LIKE '%' + @condition + '%' 
+0

當我運行時,我得到的錯誤是'消息156,級別15,狀態1,行1 關鍵字'LIKE'附近語法不正確。' – wootscootinboogie

+0

所以它在這裏失敗(?):WHERE ic.icd LIKE' '+ @condition +'%' – Ric

1

你並不需要提供LIKE運營商在你的exec調用 - 你已經在你的存儲過程得到了like。考慮而不是一個簡單的情況:

create proc FindObjects @Name NVARCHAR(50) 
as 
    select * 
     from sys.objects 
     where name like @Name 

,然後調用此:

exec FindObjects 'sys%'  

回報

sysrscols 
sysrowsets 
sysallocunits 
sysfiles1 
syspriorities 
sysfgfrag 

+0

非常好,非常實用的答案,無需創建一堆表。 +1 – wootscootinboogie

+1

我只是懶惰:)。當然,你知道你的SPROC有性和藥物......只是缺少RnR! – StuartLC

+0

你贏得了一個互聯網。不要把它全部放在一個地方。 – wootscootinboogie

0

你也可以在程序中使用這樣的。 set @SearchString ='%'+ @SearchString +'%'