線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:782
推到 Plurk!
推到 Facebook!

SQL語法一問

尚未結案
supermp54
一般會員


發表:22
回覆:24
積分:9
註冊:2004-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-30 23:50:25 IP:218.161.xxx.xxx 未訂閱
我想請問一下 select * from tablename where no in ('111','222') 若我想用一個變數@no來取代'111','222' 那SQL語法該怎麼寫 謝謝
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-31 00:16:35 IP:61.62.xxx.xxx 未訂閱
Hi, 在 mssql 中, 必須得用 execute 來執行自組 sql command 達到你要的效果, 如,    
declare @aa varchar(100)
declare @sql varchar(500)    select @aa='''111'',''222'''
select @sql = 'select * from tablename where no in ('+@aa+')'
execute(@sql)
supermp54
一般會員


發表:22
回覆:24
積分:9
註冊:2004-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-31 08:28:31 IP:218.161.xxx.xxx 未訂閱
那有沒有辦法不用exec的敘述因為假如我用 declare @aa varchar(100) declare @sql varchar(500) select @aa='''111'',''222''' select @sql = 'select * into #tmp from tablename where no in ('+@aa+')' execute(@sql) select * from #tmp 會出現找不到物件名稱#tmp
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-31 22:51:07 IP:61.62.xxx.xxx 未訂閱
Hi, 請試試以下修改!    declare @aa varchar(100) declare @sql varchar(500)    select @aa='''111'',''222''' select @sql = 'insert into #tmp select * from tablename where no in ('+@aa+')'    select * into #tmp from tablename where 1=2 execute(@sql) select * from #tmp
supermp54
一般會員


發表:22
回覆:24
積分:9
註冊:2004-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-01 09:31:16 IP:218.161.xxx.xxx 未訂閱
我的問題解決了,謝謝!! 只是有一點我不明白,就是為什麼多加了 select * into #tmp from tablename where 1=2 再用 'insert into #tmp select * from tablename where no in ('+@aa+')' 才可以執行 感謝不盡~~~~~~~~~~~~~~~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-01 20:58:17 IP:61.62.xxx.xxx 未訂閱
select * into #tmp from tablename where 1=2 這行的目的是先建立一個空的 temp table, 以方便在 execute 中的指令將資料放入, 若是直接在 execute 使用 select into 的 temp table 似乎是和現在執行指令不同的 scope, 所以無法存取得到, 還有另一種方式也是可以解決, 利用全域的 temp table, 也就是 ##tmp , 這樣就可以直接使用 select into 的方式, 如, declare @aa varchar(100) declare @sql varchar(500) select @aa='''111'',''222''' select @sql = 'select * into ##tmp from tablename where no in ('+@aa+')' execute(@sql) select * from ##tmp
supermp54
一般會員


發表:22
回覆:24
積分:9
註冊:2004-01-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-02 08:26:51 IP:218.161.xxx.xxx 未訂閱
我了解了,謝謝前輩慷慨的解答!!
系統時間:2024-05-14 2:50:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!