0

渡された色に基づいて結果を取得する SQL スクリプトがありますが、varchar として定義された変数のサイズを (50) に設定しない限り、結果は返されません。

使用する場合:like ''+@Colour+'%'は機能しますが、必要のない、または必要のない結果が返される場合に備えて、実際には使用したくありません。

列 FieldValue の型は Varchar(Max) です (このフィールドはさまざまなものを格納できるため、変更できません)。これは aspdotnetstorefront パッケージの一部であるため、テーブルやフィールド タイプを実際に変更することはできません。

これは機能しません:

declare @Col VarChar
set @Col = 'blu'
select * from dbo.MetaData as MD where MD.FieldValue = @Colour

しかし、これはうまくいきます:

declare @Col VarChar (50)
set @Col = 'blu'
select * from dbo.MetaData as MD where MD.FieldValue = @Colour

コードは次のコンテキストで使用されますが、どちらの方法でも機能するはずです

<query name="Products" rowElementName="Variant">
    <sql>
      <![CDATA[
            select * from dbo.MetaData as MD where MD.Colour = @Colour      
        ]]>
    </sql>
    <queryparam paramname="@ProductID" paramtype="runtime" requestparamname="pID" sqlDataType="int" defvalue="0" validationpattern="^\d{1,10}$" />

        <queryparam paramname="@Colour" paramtype="runtime" requestparamname="pCol" sqlDataType="varchar" defvalue="" validationpattern=""/>
  </query>

何か案は?

また、私はサイズを設定することはできません<queryparam paramname="@Colour" paramtype="runtime" requestparamname="pCol" sqlDataType="varchar" defvalue="" validationpattern=""/>

4

3 に答える 3

3

varchar特に指定しない限り、宣言はデフォルトで1文字を与えます。

http://msdn.microsoft.com/en-us/library/ms176089.aspx

于 2010-06-17T08:11:19.757 に答える
1

@Colを varchar として宣言しているためです。varchar(1) を右にするのと同じです。

n がデータ定義ステートメントまたは変数宣言ステートメントで指定されていない場合、デフォルトの長さは 1 です。CAST 関数で n が指定されていない場合、デフォルトの長さは 30 です。

ここから引用

http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx

アップデート

varchar サイズを動的に指定する必要があるのはなぜですか? 可能な最大長に設定するだけです。

于 2010-06-17T08:07:28.417 に答える
0

Declare @Col varchar基本的Declare @Col varchar(1) に、値を割り当てると、結果は@col「b」に等しくなります。

この動作は仕様によるものであり、MSDNで説明されています

于 2010-06-17T08:08:14.620 に答える