我有一个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=""/>
答案 0 :(得分:3)
默认情况下,varchar
声明将为您提供1个字符,除非您另行指定。
答案 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
中有所描述