台灣最大程式設計社群網站
線上人數
742
 
會員總數:245598
討論主題:189304
歡迎您免費加入會員
討論區列表 >> MS SQL >> function 回傳table問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
function 回傳table問題
價值 : 50 QP  點閱數:2533 回應數:6

樓主

frank
初學者
121 12
635 14
發送站內信

小弟寫了一個function
create function queryusers(@var1 varchar(1))
RETURNS TABLE
AS
RETURN
(
select * from users where userid='frank'
)

如果想變成根據傳入的變數去查詢不同的資料表
如下
create function queryusers(@var1 varchar(1))
RETURNS TABLE
AS
RETURN
(
if @var1 ='1'
select * from users where userid='frank'
else
select * from order where userid='frank'
)

可是一直出現錯誤,小弟是sql新手不知該怎麼改。

搜尋相關Tags的文章: [ sql ] , [ function ] , [ 回傳table ] ,
本篇文章發表於2013-01-09 11:13
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

pilipala
檢舉此回應

請提供錯誤訊息 ~~
本篇文章回覆於2013-01-09 11:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

frank
檢舉此回應
訊息 156,層級 15,狀態 1,程序 queryusers,行 6
接近關鍵字 'if' 之處的語法不正確。
本篇文章回覆於2013-01-09 11:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

pilipala
檢舉此回應

明確定義回傳 Table Schema 並把 SELECT 的結果 INSERT 進回傳 Table
可以參考 http://msdn.microsoft.com/zh-tw/library/ms186755.aspx 這篇MSDN文章的範例 C
本篇文章回覆於2013-01-09 11:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

frank
檢舉此回應
就是因為是不同的table無法定義單一的Table Schema
本篇文章回覆於2013-01-09 12:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

pilipala
檢舉此回應

3F 文章內的說明,
RETURN 內的 T-SQL 語法,只能是"單一 SELECT 陳述式,可定義嵌入資料表值函式的傳回值",
所以你原來的寫法一定是不可行的。
本篇文章回覆於2013-01-09 13:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

花差花差
檢舉此回應
如果抓的欄位可以整理成相同型態就可以用function,大概寫法


如果二個table真的差很多,可以用預存程序


本篇文章回覆於2013-01-09 17:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.