我正在尝试以下查询,它可以正常工作
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
有谁能告诉我这里我做错了什么?
答案 0 :(得分:4)
当您声明varchar
!!
此
DECLARE @pid varchar;
为您提供varchar
正好一个字符长度!!
使用
DECLARE @pid varchar(20);
你的问题解决了......
答案 1 :(得分: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
varchar [(n | max)]
可变长度的非Unicode字符串数据。 ñ 定义字符串长度,可以是1到8,000之间的值。最大 表示最大存储大小为2 ^ 31-1个字节(2 GB)。该 存储大小是输入数据的实际长度+ 2个字节。该 varchar的ISO同义词是字符变量或字符变化。
在数据定义或变量声明中未指定n时 语句,默认长度为1。
答案 2 :(得分:0)
DECLARE @pid varchar;
表示长度为1的varchar。
尝试DECLARE @pid varchar(4);