想請教一下,一串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,以程式設計的角度來說,要使用預存程序或函數,應該要考慮到需要的權限為何,並盡量以最小權限去做。
至於語法和中間邏輯,就麻煩你自己去思考,我給的解答只會是魚竿不是魚乾。
謝謝您的回答,我會細細思量。