【发布时间】:2018-11-27 02:08:03
【问题描述】:
我有 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 next 循环遍历 excel table1 中的所有值/参数
..................................
join 方法的执行时间比 vba+sp 方法慢(~20, 30%),但不幸的是,对于一大组参数,excel 冻结。
..................................
是否可以应用循环方法并通过 table1 值作为存储过程的参数,在 sql server 内部,在 sql 脚本中,没有 vba 或 c++ 或 perl 等?
我是一个无法访问 db/tables 设计的用户。
谢谢
【问题讨论】:
-
col1、col2和col3列中是否包含通配符?如果不是,你为什么使用LIKE?另外,您的问题到底是什么?您在底部问的内容非常模糊,但要回答您的问题 “是否可以应用循环方法并通过 table1 值,作为存储过程的参数,在 sql server 内部,在 sql 脚本中,没有 vba 或c++ 或 perl 等?”:是的,你可以在 SQL Server 内部循环;但是,通常这是一个坏主意,接近的数据集几乎总是会更快。 -
你的表有索引吗?
-
"values are between %" 这是什么意思?这没有任何意义。但是,除非您说 Table1 在
'Green%Yellow%Red'之类的列中有值,否则这意味着您的表达式将类似于'Green%Yellow%Red' LIKE 'Green',其计算结果为 false。但是,如果我的猜测也是正确的,那么您的设计模型存在重大问题。 -
col1: %value1%, %value2% etc. so, col1 like '%value1%'
-
好的,两个 table1 都在表达式的左侧,所以
'%value1%' LIKE 'value1'将评估为 false。我认为您需要在此处发布一些示例数据、预期结果,并在此处扩展您的问题。我们现在要做的事情太少了。 How to post data for a T-SQL Question
标签: sql sql-server