0

レポートデータセットにデータを入力するストアドプロシージャがあります。パラメータの1つは、sprocdefでデフォルトでNullに設定されたnull許容varchar(10)です。このパラメーターを使用すると、ユーザーは、他のパラメーター化された基準を満たすすべての注文ではなく、単一の注文についてのみレポートする場合に、注文番号を指定できます。

注文番号は整数ですが、テーブルの先頭にゼロが付いたvarchar(10)フィールドに格納されます。(レポートデータは、この方法で整数の注文番号を格納するERPシステムからインポートされるため、同じ愚かな形式を維持します!)

パラメータがnullに設定されている場合、SSMSでストアドプロシージャを実行するときと、SSRSでデータセットの[クエリ...]コンテキストメニューオプションを使用するときの両方で、期待するすべての行を取得します。

ただし、SSRSクエリデザイナフォームで注文番号(「一重引用符」で囲まれているため、SSRSが先行ゼロを切り落とさないようにする)を指定してsprocを実行すると、ゼロ行が返されます。しかし、SSMSからsprocを実行し、パラメーターを同じ値に設定すると、期待される正しい行数が得られます。

ストアドプロシージャのパラメーターに指定された値を解析するときに、SSRSがバックグラウンドで予期しないことをしているように感じるので、私の質問は、整数を含む文字列を指定して、クエリデザイナーで同じ結果を得る方法です。 SSMS?一重引用符か何か他のもの?

私はコードを投稿していません。「なぜあなたはこれをしているのですか、なぜあなたはそれをしませんか?」ベストプラクティスの中毒者、箱の外で考えることはできません、答えを入力してください!;-p

ただし、この問題を誰も認識していない場合は、コードを投稿します。

プラットフォーム:SQL Server 2008 R2、BIDS2008。

4

2 に答える 2

0

私も同じくらい疑っていたので、スクリーンショットをお願いしました :)

SSRS は、パラメーターが文字列ベースであることを認識しているため、引用符を追加する必要はありません。

クエリ パラメータが正しく入力されていると仮定すると、どこでも引用符を使用する必要はありません (フロント エンドで文字列を引用符で囲む必要はありません。明らかに、クエリで引用符で囲む必要があるか、暗黙のキャストが得られます)。

バックエンドで先行ゼロで int をパディングする場合は、REPLICATE() を使用するか、int の文字列表現を int にキャストできます。

たとえば、最大 10 個のゼロを埋め込むには:

DECLARE @SomeNumericValue int
SET @SomeNumericValue = 10
SELECT RIGHT(REPLICATE('0', 10) + cast(@SomeNumericValue as varchar), 10)

結果:

0000000010

それ以外の場合は、次の方法で回避できます。

SELECT * FROM SomeTable WHERE SomeVarcharFieldWhichActuallyContainsPaddedInts = 10

これは、SQL が暗黙的0000000010に int にキャストするためです。もちろん、数値以外の値がテーブルで表された場合、これはエラーをスローする可能性があります (SQL は全体をキャストするため、結果に関係なく、このキャストを試行するすべてのクエリに対してスローします)。比較を行うための結果セット)

たとえば、次のスクリプトを試してください。

-- This will work:
DECLARE @SomeTable Table(IntString varchar(50))

insert into @SomeTable
SELECT '000001'
UNION
SELECT '000002'
UNION
SELECT '000003'

SELECT * from @SomeTable where IntString = 1

-- This WILL return some results but it won't be happy...!

insert into @SomeTable
SELECT 'Hello'

SELECT * from @SomeTable where IntString = 1
于 2013-03-06T18:00:01.607 に答える
0

問題は単一引用符でした。それらを「クエリパラメーターの定義」「パラメーター値」ウィンドウに入れていました。他の 2 つのパラメーターでもこれを行っていましたが、そのうちの 1 つは WHERE 句の "LIKE '%parametervalue%" で使用されているため、余分な引用符はクエリの結果に影響しませんでした!

だから....私はこれに別の方法でアプローチするつもりですが、疑問が残ります.varcharフィールドにゼロが先行する整数が含まれている場合、singleを使用できない場合、どのようにSSRSで値を指定しますか?引用?

この男は同じ問題を抱えていると思い ます クエリパラメータを定義する Visual Studio

于 2013-03-06T15:34:14.847 に答える