想請教一下,一串sql 查詢指令 想用參數查詢出不同欄位數資料
試問
1.)該用預存程序? 還是 資料表函數?
2.)嘗試資料表函數 一直有警告函數的參數 必須宣告純量變數 ?
例如: 原始
select A1,A2,A3,A4,A5 from table
想透過 不同參數
例如
[參數 0]  全部
select A1,A2,A3,A4,A5 from table
[參數 1] 少兩欄
select A1,A2,A3 from table
初次嘗試,想將vba 傳遞的sql查詢 改寫在sql server上。
我是用預存程序
然後設一個參數例如@type
if(@type='1')
begin
  select A1,A2,A3,A4,A5 from table
end
if(@type='2')
begin
  select A1,A2,A3 from table
end
                對,第一次寫 還沒搞懂觀念..
設定了參數  但 回傳table   <--使用return?
卻不知道怎麼定義,會因為參數而變小的table
CREATE PROCEDURE [dbo].[sp_TABLE_INFO]
(
    @ID          VARCHAR(20),
    @TYPE        VARCHAR(1)    
)
AS
BEGIN
  IF(@TYPE='0')
  BEGIN
    select A1,A2,A3,A4,A5 
    from table
    WHERE ID=ID
  END
  ELSE IF(@TYPE='1')
  BEGIN
    select A1,A2,A3 
    from table
    WHERE ID=ID
  END
END
假設上面先建立這個預存
然後就是用
EXEC sp_TABLE_INFO '9453','0'
這樣直接呼叫預存就能得到table了
謝謝你提供的解答,發現if後面如您的範例加上()即可⋯初學還有很多坑(^_^)a
預存程序,然後用動態的方式組Query
create procedure xp_test @columns nvarchar(1024)
as begin
    exec('select ' + @columns + ' from tables')
end
                        1.請問一下 exec(   )  裡面如何 撰寫if else ?
2. 若 用 declare	@sql as  NVARCHAR(MAX),
set @sql ='select ....   ' 又有 if 參數=?  的變化
如何更改?
這只是一個動態Query的範例,請根據你的實際需求去修改,你可以想成要組出一個Query的字串,然後拿去執行而已,中間組字串隨便你要怎樣做都可以,只要最後結果符合你要的Query就行。
會建議使用預存程序,原因是執行權限與function不同,詳情可以自己googlesql procedure vs. function,以程式設計的角度來說,要使用預存程序或函數,應該要考慮到需要的權限為何,並盡量以最小權限去做。
至於語法和中間邏輯,就麻煩你自己去思考,我給的解答只會是魚竿不是魚乾。
謝謝您的回答,我會細細思量。