如何将SQL Server查询转换为Access
我在Access 2010工作,我的桌子设计很差 该表有多个列,其中可能包含我需要查找的名称 即 公司,公司DBA1,公司DBA2,公司DBA3,公司DBA4,公司DBA5等等。。。DBA12公司 我想到的最好的方法是:(假设我正在寻找jbl) 虽然它能工作,但速度非常慢 我发现,如果我能够使用SQLServer(我不能),我可以使用如下存储过程:如何将SQL Server查询转换为Access,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我在Access 2010工作,我的桌子设计很差 该表有多个列,其中可能包含我需要查找的名称 即 公司,公司DBA1,公司DBA2,公司DBA3,公司DBA4,公司DBA5等等。。。DBA12公司 我想到的最好的方法是:(假设我正在寻找jbl) 虽然它能工作,但速度非常慢 我发现,如果我能够使用SQLServer(我不能),我可以使用如下存储过程: BEGIN SET NOCOUNT ON; declare @Sql varchar(max) set @sql
BEGIN
SET NOCOUNT ON;
declare @Sql varchar(max)
set @sql =
'select Company ,ClientNumber
from dbo.tblClient
where isnull([Company],'''') + isnull( [Company DBA],'''') + isnull( [Company DBA2],'''') + isnull( [Company DBA3],'''') + isnull( [Company DBA4],'''') + isnull( [Company DBA5],'''') + isnull( [Company DBA6],'''') + isnull( [Company DBA7],'''') + isnull( [Company DBA8],'''') + isnull( [Company DBA9],'''') + isnull( [Company DBA10],'''') + isnull( [Company DBA11],'''') + isnull( [Company DBA12],'''') like ''%'+@Look4+'%''
order by company'
print @sql
exec (@sql)
END
这相当快
因此,我想知道是否有必要在MS Access 2010中创建类似的查询或存储过程?您最好使用联合查询,至少使表看起来正常:
SELECT q.Company, q.ClientNumber, q.DBA
FROM
(SELECT Company, ClientNumber, DBA1 As DBA FROM tblClient
UNION All
SELECT Company, ClientNumber, DBA2 As DBA FROM tblClient
....) As q
Where q.Company = "jbl" or q.DBA="jbl"
当然,您可以将规范化版本保存为查询,然后在其他查询中使用该“视图”,这将为您提供:
PARAMETERS SearchString Text;
SELECT Company, ClientNumber, DBA
FROM ANormalTable
WHERE Company = SearchString Or DBA = SearchString
请注意,一旦添加了不特别包括null的位置,所有null都将被忽略
参考资料:直接翻译成Access将是:
select * from tblClient
where company & dba1 & dba2 & dba3 like '*jbl*'
编辑:
要进行精确匹配,您可以执行以下操作:
select * from tblClient
where '|' & company & '|' & dba1 & '|' & dba2 & '|' & dba3 & '|' like '*|' & 'jbl' & '|*'
我个人喜欢动态SQL的灵活性,就像您在示例中所展示的那样。。。。在Access选项中执行VBA过程。我从来没有写过,但我知道这是另一种选择。如果操作员真的说了
和,那就不正确了。从技术上讲,OP说的是Company='jbl'
。。。为什么要强迫他在Access SQL中使用类似于
的,“&”是连接运算符。所以这只是构建一个字符串。而且我不认为文本列可以是NULL
,所以如果你在寻找“jbl”,那么像“*jbl*”
这样的“TimeWarnerCablejblTWC”会起作用。如果公司被称为“或”,你会有多个错误匹配。事实上,如果你在搜索通用的东西,你会遇到问题,但是OP的SQL Server代码有风险,所以我认为OP可以在Access版本中使用它。看来这可能是最好的解决方案!与我之前的查询相比,它非常快。我看看是否可以尝试一下,你认为它会运行得更快吗?你能详细说明最后一部分吗??我不是那么精通访问!如何使它成为一个视图不,我认为它不会运行得更快。要创建“视图”,只需保存联合查询,然后在将来的查询中使用它。
select * from tblClient
where '|' & company & '|' & dba1 & '|' & dba2 & '|' & dba3 & '|' like '*|' & 'jbl' & '|*'