SQL Server:如何使用变量?

时间:2013-10-12 07:11:24

标签: sql sql-server stored-procedures

我正在尝试以下查询,它可以正常工作

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

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

3 个答案:

答案 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

From SQL Server MSDN

  

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);