除非我设置varchar大小,为什么Sql不会返回结果?

时间:2010-06-17 08:03:52

标签: asp.net sql xml aspdotnetstorefront

我有一个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=""/>

中设置尺寸

3 个答案:

答案 0 :(得分:3)

默认情况下,varchar声明将为您提供1个字符,除非您另行指定。

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

答案 1 :(得分:1)

这是因为您将 @Col 声明为varchar。它与右varchar(1)相同。

  

在数据中未指定n时   定义或变量声明   声明,默认长度为1。   如果未使用CAST指定n   功能,默认长度为30。

从这里引用

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

<强>更新

为什么需要动态指定varchar大小?只需将其设置为最大可能长度。

答案 2 :(得分:0)

Declare @Col varchar基本上是Declare @Col varchar(1)所以当您指定值时,结果将是@col等于“b”。

此行为是设计使然,在MSDN

中有所描述