[英]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腳本中的存儲過程的參數,而不使用vba或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.