2015-01-12 4 views
1

T-SQL OPENROWSET 명령에 매개 변수를 전달하려고하는 문제가 있습니다. 나는 내가 EXEC @laborquery 명령을 사용하지 않고, 직접 SELECT * FROM OPENROWSET를 실행하면 데이터 형식을OPENROWSET에 날짜 매개 변수 전달

을 smalldatetime으로하는 문자열을 변환 할 때

변환 실패 오류가 계속, 그것은 작동합니다. 나는 그것이 문법 에러라고 생각하고있다. 나는 전달하는 방식이 @lastModifiedBeginDate@lastModifiedEndDate이다.

내가 SELECT하고있는 timesheet_date 필드는 char(10) 필드이며, 나는 이것을 변경할 수있는 방법이 없습니다.

DECLARE @lastModifiedBeginDate smalldatetime = 2014-12-01 
DECLARE @lastModifiedEndDate smalldatetime = getdate() 
DECLARE @laborquery varchar(max) 

SET @laborquery ='SELECT * FROM OPENROWSET(''SQLNCLI'', 
              ''Server=zzz;Database=yyy;Trusted_Connection=yes;Integrated_Security=SSPI'', 
    ''SELECT 
     a.company_code AS company_code, 
     a.employee_or_equipment_id AS employee_or_equipment_id, 
     a.timesheet_date as timesheet_date, 
    FROM Allocated_Time a 
    INNER JOIN Company_Location b 
    ON B.company_code = A.company_code 
    WHERE work_unit_Id 
     IN (''10051862'', ''10051863'', ''10051868'', ''10051959'', ''10051979'', ''10080220'') 
     AND CAST(timesheet_date AS smalldatetime) BETWEEN ' + @lastModifiedBeginDate + ' AND ' + @lastModifiedEndDate + ' AND B.location=1'')' 
EXEC @laborquery 

답변

1

그냥 exec

EXEC (@laborquery) 

@laborquery 주위 Parenthesis를 추가하고 당신의 마지막 조각에 varchar

SET @laborquery ='SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=zzz;Database=yyy;Trusted_Connection=yes;Integrated_Security=SSPI'', ''SELECT 
    a.company_code AS company_code, 
    a.employee_or_equipment_id AS employee_or_equipment_id, 
    a.timesheet_date as timesheet_date, 
    FROM Allocated_Time a 
    INNER JOIN Company_Location b 
    ON B.company_code = A.company_code 
    WHERE work_unit_Id 
    IN (10051862, 10051863, 10051868, 10051959, 10051979, 10080220) 
    AND CAST(timesheet_date AS smalldatetime) BETWEEN ''''' + 
    convert(varchar(30),@lastModifiedBeginDate) + ''''' AND ''''' + 
    convert(varchar(30),@lastModifiedEndDate) + ''''' AND B.location=1'')' 
+0

고맙겠지 만, 여전히 같은 오류가 있습니다. – user3191188

+0

@ user3191188 오류 메시지 –

+0

문자열을 smalldatetime 데이터 형식으로 변환 할 때 변환하지 못했습니다. – user3191188

1

에 대답을 당신의 변수를 quotes 좀 더 추가하고 변환해야 퍼즐은 2014-12-01이 날짜 상수가 아니라는 것입니다. 실제로는 정수가 포함 된 합계입니다 (2014 - 12 - 1 = 2001). 2001은 1905 년 6 월 25 일 내부 값입니다. 날짜 상수를 작은 따옴표로 묶으십시오.

+0

저는 1905 년 6 월 25 일의 가치를보고 있었기 때문에 간신히 알아 냈습니다. 정말 고마워. – user3191188