2016-09-10 2 views
1

올바른 Excel 파일을 얻기 위해 Path를 전달할 수있는 Openrowset Query가 있습니다. 따옴표 및/또는 형식 변환의 정확한 숫자를 파악할 수 없습니다.Openrowset 쿼리에 Date 변수 전달

표에서 특정 날짜를 얻으려면 WHERE 문을 전달해야합니다. 나는 VBA에서 2 인용과 2 &을 넣었고 모두 설정되었습니다. SQL은 수백 가지가 필요합니다!

set @sql1 = 'select * 
      FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
         ''Excel 12.0;Database=' + @filePath1 + '' + ';' + '''' + ', 
      ''Select * from [Sheet1$] '''+')' 

exec(@sql1) 

내가 WHERE DATE = @PnLDate

답변

0

규칙을 추가 할 (누군가가 SQL에 대한 온라인 대학에 대한 링크가있는 경우 그 너무 감사 할 것 따옴표) 당신이 알고있는 것과 매우 유사하지만, 그것을 작은 따옴표 '에 적용됩니다. 그들 중 하나를 문자열 안에 넣고 싶다면 을 두번 사용하여 ''을 사용하십시오. 그것들 외에, 당신은 오픈을위한 것과 오픈을위한 것을 가지고 있어야합니다.

표시하는 문자열은 단지 비어있는 빈 문자열과 하나의 결과 문자열 만 대체 할 수있는 중복 된 인접 문자열을 포함하기 때문에 조금 복잡합니다. 당신의 문자열의 simiplificated 버전 아래 :와

set @sql1 = 'select * 
     FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
      ''Excel 12.0;Database=' + @filePath1 + ';'', 
      ''Select * from [Sheet1$] '')' 

당신 수 있습니다 where 요청 :

DECLARE @PnLDate datetime  -- may be varchar instead, if so, must remove convert(....) and use straight @PnLDate 
set @PnLDate = '2014/08/01' 

set @sql1 = 'select * 
     FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
      ''Excel 12.0;Database=' + @filePath1 + ';'', 
      ''Select * from [Sheet1$] where DATE = #'+  -- hash # is MS Access delimiter for dates 
      convert(varchar(25), @PnLDate, 111) 
      +'#'')'          -- results in #2014/08/01# 

는 당신이 "동적 SQL을"사용할 때 데이터가 문자열에 악성 코드를 삽입 할 수 있다고 경고합니다. 대한 sql Injection

+0

이 방법을 사용하여 읽어 세트 @의 SQL1 (PnLDate @, NVARCHAR (최대)) ' 세트 @PnLDate = 변환을 = 'Microsoft.ACE.OLEDB.12.0'OPENROWSET * FROM 를 (선택 ' '' ''엑셀 12.0; 데이터베이스 = '+ @ filePath1 +', '', '[Sheet1의 $]에서'선택 * WHERE DDate은 = '+ @PnLDate +' '') ' ' I 이 오류가 발생합니다. 데이터 형식 nvarchar (max)와 날짜가 add 연산자에서 호환되지 않습니다. – Rich

+0

@PnLDate를 문자열로 변환해야하는 오류가 발생합니다. (SQL 서버가 자동으로 해당 유형을 결합하는 몇 가지 작업 만 있지만 datetime은 하나가 아닙니다.) 또한 결과 문자열은 유효한 SQL 문이어야합니다. 귀하의 사례가 시끄러운 결과를 가져올 수있는 것은'DDate = 12/31/2015'가 날짜 상수 주위에 필수 인용문을 누락 한 것으로 해석됩니다. 내 수정 된 예제 및 sorround 추가 된 따옴표로 변환을 참조하십시오. –

+0

대단히 도움을 주셔서 감사합니다하지만이 행운이 'DECLARE @PnLDate varchar (25)'에 대한 형식을 변경합니다 다음과 같은 변수를 설정합니다. this : 'set @PnLDate = 08/01/2014' 그런 다음 쿼리를 사용했는데 다음과 같이 나타납니다. _ [Select1 * from [Sheet1 $] where DATE = "08-01-2014" "OLE DB 공급자에 대해 은 또한 따옴표를 제거하기 위해 노력하고 내가 날짜의 숫자 값을 사용하는 경우 그것은 여전히 ​​ – Rich

관련 문제