Почему Sql не возвращает результаты, если я не установил размер varchar? - PullRequest
0 голосов
/ 17 июня 2010

У меня есть 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 ]

3 голосов
/ 17 июня 2010

Декларация varchar даст вам 1 символ по умолчанию, если не указано иное.

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

1 голос
/ 17 июня 2010

Это потому что вы объявляете @ Col как varchar. Это так же, как для правого varchar (1).

Когда n не указано в данных определение или объявление переменной утверждение, длина по умолчанию равна 1. Когда n не указано с CAST функция, длина по умолчанию составляет 30.

Цитата отсюда

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

UPDATE

Зачем вам нужно динамически указывать размер varchar? Просто установите максимально возможную длину.

0 голосов
/ 17 июня 2010

Declare @Col varchar по существу Declare @Col varchar(1), поэтому, когда вы присваиваете значение, результатом будет то, что @col будет равно "b".

Это поведение разработано и описано в MSDN

...