2017-12-12 13 views
0

クイック概要: Crystal Reportsでエラー「ADOエラーコード:0x80040e14 ...キーワード 'ALL'の近くの構文が正しくありません。従業員番号の「すべての」特殊キーワードを使用してSQL SPを実行すると、SQL Server 2008 R2のストアドプロシージャを実行するCR 2016レポートパラメータの問題

ロングストーリー:

  1. 日から(@fDate - SQLストアドプロシージャ/ - CR: 私はそれを実行したときに3つのパラメータを収集クリスタルで書かれた報告書2016レポートを持っている{FROMDATE?}コマンド)日に
  2. (@tDate - SQLストアドプロシージャ/ {のToDate?} - CRコマンド)
  3. 従業員番号(@eCode - SQLストアドプロシージャ/ {EmplNo?} - CR コマンド)

レポートには、1人の従業員またはすべての従業員に対して実行できる機能があります。ただし、これらのパラメータは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 Serverの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

あなたの問題はあなたのパラメータ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;あなたは、SQL Serverプロファイラを使用してそれを見ることができ

Incorrect syntax near the keyword 'all'.

を生産しています。サーバーに送信されるものが表示されます。

あなたのクリスタルレポートは、Crystalレポートそのものの中で、すべてがスムーススペシャルとして解釈できると思うので、文字列として送信されません。

単語を'everything'に変更して、ALLの代わりに試してみることができます。

+0

私はCASE ... WHEN句を "%EVERY%"をキャッチするように切り替えました。そのフィールドを空白にしても機能しない理由を教えてください。 "データベースからデータを取得できませんでした 詳細:ADOエラーコード:0x80040e14 ソース:Microsoft OLE DBプロバイダ(SQLサーバー用) 説明 '、'の構文が正しくありません SQLステート: 42000 ネイティブエラー:102 [Database Vendor Code:102] " – Smizles

+0

同じ問題があるようですが、水晶レポートの問題です。それは引用符で囲まれていないので、この場合、渡されるコードはexec dbo.sp_test_all '10'、 'final with "、" – sepupic

+0

のように表示されます。 CRからの入力とそれをSQLサーバが理解できるものに変換しますか? – Smizles

関連する問題