1

我正在尝试以下查询,它可以按我的预期工作

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

结果是:

0147

但是当我执行以下查询以便可以将此值存储在变量中时

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

它不像0147上面的查询那样返回,而是返回的是

0

谁能告诉我我在这里做错了什么?

4

3 回答 3

4

当你声明一个!!时,你应该总是定义一个长度。varchar

这个

DECLARE @pid varchar;

给你一个varchar正好一个字符的长度!!

利用

DECLARE @pid varchar(20);

你的问题就解决了……

于 2013-10-12T07:14:00.967 回答
2

你还没有声明 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

来自 SQL Server MSDN

varchar [ ( n | max ) ]

可变长度、非 Unicode 字符串数据。n 定义字符串长度,可以是 1 到 8,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。存储大小是输入数据的实际长度 + 2 个字节。varchar 的 ISO 同义词是 char 变化或字符变化。

如果在数据定义或变量声明语句中未指定 n ,则默认长度为 1。

于 2013-10-12T07:14:36.393 回答
0

DECLARE @pid varchar;表示长度为 1 的 varchar。

尝试DECLARE @pid varchar(4);

于 2013-10-12T07:14:57.753 回答