2012-03-16 3 views
0

Google을 통해 답변을 찾지 못했습니다. SQL Server에서 저장 한 proc에서이 코드를 실행해야합니다.SQL Server openrowset() MS 액세스 테이블의 열 개수 테스트

나는 tblReports라는 테이블이있는 100+ 액세스 dbs가있는 폴더가 있습니다. 일부 액세스 db의 AdminReport라는 tblReports에 여분의 열이 있습니다.

만약 존재한다면 여분의 칼럼을 포착 할 필요가있다 ... 나는 얼마나 많은 칼럼이 tblReports에 있는지 테스트해야한다. 그래서 sp에서 if/else 문을 사용하여 올바른 SQL을 생성 할 수있다. 열 개수.

나는 당신의 생각을 읽고 싶습니다. 여기에 관련 스 니펫이 있습니다.

set @sql = 'Insert into CustomerServiceIntranet.dbo.ReportCriteria 
      (UserInfo,RptNbr,RptType,RptDesc,GroupCDBrk,ClientCDBrk,CategoryCDBrk, 
      UserIDBrk,UnitCDBrk,WrkTypeBrk,StatCDBrk,StatDatBrk, 
      ExperBrk,GroupList,ClientList,CategoryList,UserIDList,BusAreaList, 
      WrkTypList,StatusList,QueueList,ReviewDay,ReviewDayNA, 
      ErrorImpact,DateRange,DataSource,RptPathFile)' 
     + 'Select '''+ @userfilename + ''', ors.* ' 
     + 'from (select * From Openrowset(''Microsoft.ACE.OLEDB.12.0'',''' 
     + @CurrentName 
     + ''';''Admin'';,''select * from tblReports'')) ors' 

답변

0

표준 접근 방식은 DoCmd.TransferDatabase를 호출하여 tblReports에 연결하는 것입니다. 그런 다음 SQL을 시작하기 전에 테이블의 필드 수를 세는 것이 가능합니다. 모양이 끝나면 DoCmd.DeleteObject를 호출하여 링크를 삭제합니다.

확실히 당신이하려고하는 것보다 더 깔끔하게 보이지 않습니다.

+0

나는 MS Access가 아닌 SQL Server에서이 작업을 수행하고 있습니다. SQL Server에서 VBA 명령을 실행할 수 있다고 말하고 있습니까? openrowset() 사용? –

+0

죄송합니다. SQL Server에서이 작업을 수행하고 있다는 것을 알지 못했습니다. VBA에서 그렇게하는 것이 더 쉬운 방법 일 것입니다. –

+0

예, 성능이 필요합니다 (100+ databasesin 20 초 실행) 및 재사용이 필요합니다. 나는 모든 준비가되어있는 sp를 가지고있다 (그리고 나는 마지막/여분의 열을 무시하면 일한다). –