請教關於預存程序的select in問題 |
答題得分者是:timhuang
|
demo
一般會員 發表:14 回覆:14 積分:5 註冊:2003-01-13 發送簡訊給我 |
各位大大您好: 在sql server上寫了一隻預存程序,
功用是在把傳入的參數(例如:'item1,item2'),
轉成sql語法中 in ( 'item1','item2')
然後再把格式轉好的變數下到sql上,
問題來了,為什麼我在下
select * from table where field1 in (@temp) 時,sql都沒有撈到資料呢?
以下是我的預存程序內容:
CREATE PROCEDURE DoAction
@conin varchar(1024)
AS
print @conin -->值為item1,item2
DECLARE @temp varchar(1024)
select @temp = ''
--拆解成 in (item)的語法 @temp為拆解完成值
while len(@conin)>0
begin
if CHARINDEX(',', @conin) >0
begin
select @temp = @temp '''' SUBSTRING(@conin, 1, CHARINDEX(',', @conin)-1) '''' ','
select @conin = SUBSTRING(@conin,CHARINDEX(',', @conin) 1,len(@conin)-CHARINDEX(',', @conin) )
end
else
begin
select @temp = @temp '''' SUBSTRING(@conin,1,len(@conin)) ''''
select @conin = ''
end
end
select @temp
print @temp -->我正常print出來的值是對的,'item1','item2'
Select * from table where (field1 IN ('item1','item2')) -->這樣run出來能抓得到值
Select * from table where (field1 IN (@temp)) -->為什麼這樣就撈不到資料呢? 希望各位大大能幫個忙,找好多天都找不到怎麼解這個問題
謝謝您
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
demo
一般會員 發表:14 回覆:14 積分:5 註冊:2003-01-13 發送簡訊給我 |
真是太謝謝您了,可以了耶!呵
可以再請教您一下嗎?
我預存程序後面又多加了用cursor去針對每一筆撈到的資料作處理
預存程序如下:
declare concursor cursor for Select Field2 from table1 where (field1 IN (@temp))
open concursor
fetch concursor into @field2
while @@fetch_status=0
begin
-->我要處理的事
fetch next from concursor into @itemobjid
end
close concursor
deallocate concursor
這樣,我如果把
declare concursor cursor for Select Field2 from table1 where (field1 IN (@temp)) 改為您教我的方式,這樣會有
declare concursor cursor for @cmd
這樣的話要怎麼解呢?
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
一樣地, 若是要在 cursor 中的 select_statement 為自組參數時, 就得將整個 cursor 在自組指令中執行, 如,
set @cmd = ' declare @itemobjid varchar(100) declare concursor cursor for Select Field2 from table1 where (field1 IN ('+@temp+')) open concursor fetch concursor into @field2 while @@fetch_status=0 begin -->我要處理的事 fetch next from concursor into @itemobjid end close concursor deallocate concursor ' exec sp_executesql @cmd要注意的是在該 @cmd scope 中的變數是和外界不通的, 必須自行再次宣告哦! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |