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。与right 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 回答