簡體   English   中英

表值作為SQL Server存儲過程的參數

[英]Table values as parameters for SQL Server stored procedure

我有table1:col1,col2,col3和table2:col1,col2,col3
我的目標是獲取所有記錄

where     
t2.col1 like t1.col1 and    
t2.col2 like t1.col2 and    
t2.col3 like t1.col3   

......................................................

一種變體是內部聯接方法

select * from t2 inner join t1 on    
t2.col1 like t1.col1  and  
t2.col2 like t1.col2  and  
t2.col3 like t1.col3     

......................................................

另一個變體是基於'where'子句的存儲過程:

select *  from t2     
where t2.col1 like parameter1  and      
t2.col2 like parameter2  and     
t2.col3 like parameter3    

然后我在VBA中調用該過程,並使用for下一個循環遍歷excel table1中的所有值/參數
.........................................................
join方法的執行時間比vba + sp方法要慢(〜20,30%),但是不幸的是,對於大量參數,excel凍結。
.........................................................
是否可以應用循環方法並遍歷table1的值作為sql服務器內部,sql腳本中的存儲過程的參數,而不使用vb​​a或c ++或perl等?

我是無法訪問數據庫/表設計的用戶。

謝謝

在此處輸入圖片說明

首先,您在問題中的兩個查詢不相同:

select * from t2 inner join t1 on    
t1.col1 like t2.col1  and  
t1.col2 like t2.col2  and  
t1.col3 like t2.col3     

在這里你有t1 like t2

select *  from t2     
where t2.col1 like parameter1  and      
t2.col2 like parameter2  and     
t2.col3 like parameter3    

這里是圍繞t2 like t1另一種方式, t2 like t1

最終結果會有所不同。

根據樣本數據,看起來應該t2 like t1一樣是t2 like t1


您可以嘗試使用CROSS APPLY而不是JOIN來重寫查詢,但是這不會對性能產生任何影響。

SELECT *
FROM
    t1
    CROSS APPLY
    (
        SELECT
        FROM t2
        WHERE
            t2.col1 like t1.col1
            and t2.col2 like t1.col2
            and t2.col3 like t1.col3
    ) AS A
;

此查詢結構模仿您的存儲過程方法,其中對於t1中的每一行,您要從t2選擇一組行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM