Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将SQL Server查询转换为Access_Sql_Ms Access_Ms Access 2010 - Fatal编程技术网

如何将SQL Server查询转换为Access

如何将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

我在Access 2010工作,我的桌子设计很差

该表有多个列,其中可能包含我需要查找的名称

即 公司,公司DBA1,公司DBA2,公司DBA3,公司DBA4,公司DBA5等等。。。DBA12公司

我想到的最好的方法是:(假设我正在寻找jbl)

虽然它能工作,但速度非常慢

我发现,如果我能够使用SQLServer(我不能),我可以使用如下存储过程:

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' & '|*'