2013-10-12 2 views
1

Я пытаюсь следующий запрос, и она работает, как я ожидать, что этоSQL Server: как использовать переменные?

SELECT RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY

Результат является:

Но когда я выполнить следующий запрос таким образом, что я могу сохранить это значение в переменной

DECLARE @pid varchar; 
SELECT @pid = RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY 
SELECT @pid as party_id 

он не возвращает 0147 как в приведенном выше запросе, вместо того, что она возвращает это

Может кто-нибудь пожалуйста, скажите мне, что я делаю неправильно здесь?

ответ

4

Вы должны всегда определить длину при объявлении varchar !!

Это

DECLARE @pid varchar; 

дает вам varchar из ровно один символ длина !!

Использование

DECLARE @pid varchar(20); 

и ваша проблема решена ...

+0

marc_s есть длина по умолчанию IIR ... нет? (или это для nvar ...)) –

+0

@RoyiNamir: да: ** ONE ** знак. При использовании 'varchar' без длины в контексте' CAST' или 'CONVERT', это 30 символов, но когда вы определяете переменную, это 1 символ –

+0

Marc, да, я смутился с этой информацией: _« Когда n не указывается при использовании функций CAST и CONVERT, длина по умолчанию - 30. "_ –

2

Yo не объявили размер VARCHAR, поэтому оно усечения. Установите размер достаточно большим, чтобы сохранить результат.

DECLARE @pid varchar(10); 
SELECT @pid = RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY 
SELECT @pid as party_id 

From SQL Server MSDN

VARCHAR [(п | макс)]

переменной длины, строковые данные не-Unicode. n определяет длину строки и может быть значением от 1 до 8000. max указывает, что максимальный размер хранилища составляет 2^31-1 байта (2 ГБ). Размер хранилища - это фактическая длина введенных данных + 2 байта. Синонимы ISO для ISO-символов различаются или различаются.

При п не указана в определении данных или переменной заявление, длина по умолчанию 1.

0

DECLARE @pid varchar; предполагает VARCHAR длиной 1.

Попробуйте DECLARE @pid varchar(4);

Смежные вопросы