2017-12-12 4 views
0

요약 : Crystal Reports에서 "ADO 오류 코드 : 0x80040e14 ... 키워드 'ALL'근처에 잘못된 구문이 있습니다."라는 오류 메시지가 나타납니다. 직원 번호에 대한 'ALL'특수 키워드를 사용하여 SQL SP를 실행할 때.SQL Server 2008 R2에서 저장 프로 시저를 실행하는 CR 2016 보고서 매개 변수와 관련된 문제

긴 이야기 : 나는 크리스탈로 작성된 보고서가 실행될 때 3 개 개의 매개 변수를 수집 2016보고 있습니다

  1. 날짜에서 (@fdate - 절차/{? FROMDATE} 저장된 SQL - CR을 명령) 날짜로
  2. (@tDate - 저장 SQL 프로 시저/{TODATE?} - CR 명령)
  3. 직원 수 (@eCode - 저장 SQL 프로 시저/{EmplNo?} - CR 명령)

우리가 보고서에서 원했던 기능 중 하나는 한 직원 또는 모든 직원을 대상으로 실행할 수 있다는 것입니다. 그러나 이러한 매개 변수는 Crystal Reports 명령에 있으므로 직원 번호 매개 변수를 선택적으로 만들 수 없습니다. 다른 포럼에서 나는 최고 제안을 보았습니다. 사례를 만드는 것이 었습니다 ... 저장 프로 시저 측면에서 매개 변수를 평가할 때 실제로 직원 번호를 전달하는지 또는 모든 레코드를 원할 경우 결정할 때였습니다. 나는 "ALL"이라는 키워드를 사용하여 모든 직원에 대한 기록을 반환하고자 함을 나타냅니다. MS SSMS에서 매개 변수를 명시 적으로 선언하고 설정할 때 저장 프로 시저가 작동합니다. 그러나 정확히 같은 저장 프로 시저를 실행하려고하면 CR 오류가 발생합니다. 이 오류의 원인은 무엇입니까? CR에 내가 필요한 정보를 어떻게보고 할 수 있습니까?

SAP Crystal Reports Designer 2016 - 데이터베이스에서 데이터를 검색하지 못했습니다. 세부 : ADO Error Code: 0x80040e14

SAP 크리스탈이 SQL 명령 보고서 :

EXEC AIM.dbo.GetLaborUtil {?FromDate}, {?ToDate}, {?EmplNo} 

MS SQL 서버 2008 R2 (SP2) 익스프레스 - 저장 프로 시저 코드 :

USE [AIM] 
GO 
/****** Object: StoredProcedure [dbo].[GetLaborUtil] Script Date: 12/12/2017 1:59:38 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[GetLaborUtil] @fDate date, @tDate date, @eCode varchar(4) 
AS 
    SELECT 
     * 
    FROM 
     AIM.dbo.LaborUtil 
    WHERE 
     LaborUtil.AttendDate BETWEEN @fDate AND @tDate 
     AND 
     LaborUtil.EmplCode = CASE WHEN @eCode = '' THEN LaborUtil.EmplCode 
             WHEN @eCode LIKE '%ALL%' THEN LaborUtil.EmplCode 
             WHEN @eCode IS NULL THEN LaborUtil.EmplCode 
             ELSE CAST(@eCode AS smallint) 
           END 
    ORDER BY 
     LaborUtil.EmplName, 
     LaborUtil.AttendDate 
작동하는 저장 프로 시저를 실행하는

수동 쿼리 :

DECLARE @fDate date 
DECLARE @tDate date 
DECLARE @eCode varchar(4) 

SET @fDate = '1900-01-01' 
SET @tDate = '2100-12-31' 
SET @eCode = 'ALL' 

EXEC AIM.dbo.GetLaborUtil @fDate, @tDate, @eCode 

답변

0

내 생각에 문제는 귀하의 매개 변수에 있습니다. eters가 SQL Server로 전송됩니다.

절차가 올바르므로 오류를 생성 할 수 없지만 sp의 CALL은 수행 할 수 있습니다.

create proc dbo.sp_test_all 
@p1 varchar(100), @p2 varchar(100) 
as 
    select @p1 as p1, @p2 as p2; 
go 


exec dbo.sp_test_all '10', all; 

exec dbo.sp_test_all '10', all;

Incorrect syntax near the keyword 'all'.

당신은 SQL Server 프로파일 러를 사용하여 볼 수 있습니다 생산 : 여기

은 예입니다. 서버로 전송되는 내용이 표시됩니다.

크리스탈 보고서 자체가 수정 보고서 자체 내에서 스턴 스페셜로 해석 될 수 있으므로 문자열로 전송되지 않습니다.

'everything'이라는 단어로 SP를 변경하고 ALL 대신 사용해보십시오.

+0

좋아요, 그래서 저는 CASE ... WHEN 절을 "% EVERY %"를 잡으려고 전환했습니다. 그 필드를 공백으로 두는 것이 왜 효과가 없는지 말해 줄 수 있습니까? CR에서 얻은 오류 : "데이터베이스에서 데이터를 검색하지 못했습니다. 세부 정보 : ADO 오류 코드 : 0x80040e14 원본 : SQL Server 용 Microsoft OLE DB 공급자 설명 : ','근처의 구문이 올바르지 않습니다. SQL 상태 : 42000 기본 오류 : 102 [Database Vendor Code : 102] " – Smizles

+0

크리스탈 문제와 같은 문제 인 것 같습니다. 그것은 인용하지 않는다. 그래서이 코드에서는 전달되는 코드가 exec dbo.sp_test_all '10', "with final", " – sepupic

+0

"이라는 명령에 공백 매개 변수를 넣을 수있는 표현식을 생각해 낼 수 있습니까? CR로부터 입력을 받아서 SQL 서버가 이해할 수있는 것으로 변환 할 수 있습니까? – Smizles

관련 문제