0

有没有办法在 sql 中调整本地 varchar 的大小?

喜欢:

DECLARE @MYVARIABLE AS VARCHAR(3)
REDIM @MYVARIABLE(50)

这会将 @MYVARIABLE 的大小更改为 50 个字符。

注意:我需要保留变量,因为我之后会使用它。所以我不能用另一个。

样本 2:

DECLARE @MYVARIABLE AS VARCHAR(4)
SET @MYVARIABLE = 'TEST'
SET @MYVARIABLE = '12345'
SELECT @MYVARIABLE

在这里,最后是 MYVARIABLE = '1234'。应该是'12345'怎么做(并保持我的变量)

我可以删除当前并创建一个新的吗?

4

3 回答 3

1

将变量设置为您知道首先需要的最大尺寸,例如:

DECLARE @MYVARIABLE AS NVARCHAR(50)

或者如果你不知道你需要多大,那么你总是可以使用 MAX:

DECLARE @MYVARIABLE AS NVARCHAR(MAX)

如果变量的长度对您很重要,那么您可以在为其赋值后得到它:

DECLARE @MYVARIABLE AS NVARCHAR(MAX)
DECLARE @LENGTHOFMYVARIABLE AS INT
SET @MYVARIABLE = 'somerandomtext'
SET @LENGTHOFMYVARIABLE = LEN(@MYVARIABLE)

在这种情况下@LENGTHOFMYVARIABLE为 14。

更新

我知道如何做到这一点的唯一其他方法是使用辅助临时变量:

DECLARE @MYVARIABLE AS NVARCHAR(3)
DECLARE @MYBIGGERTEMPVARIABLE AS NVARCHAR(50)
SET @MYBIGGERTEMPVARIABLE = @MYVARIABLE 

显然,如果变量再次传递,会有一些限制,但除此之外,唯一的另一种方法是将源变量长度更改为更合理的值。真的没有太多理由拥有如此小的变量。

于 2012-08-15T14:18:51.290 回答
0

不,您不能更改变量的定义,也不能取消声明变量。它的定义是固定的,从它被声明的那一刻起,直到批次结束。

如果声明似乎没有运行,它的定义甚至会生效:

if 1 = 0
begin
    declare @a varchar(3)
    print 'declared!'
end
else
begin
    print 'not declared?'
end
set @a = 'abc'
print @a

印刷:

not declared?
abc

由于您无法更改声明变量的方式,因此您将不得不放弃这种尝试解决您的整体问题的方法(但我无法提供建议,因为您没有描述您的整体问题)

于 2012-08-16T08:29:42.123 回答
0

您可以使用临时变量:

DECLARE @MYVARIABLE AS VARCHAR(3)

DECLARE @myVal as VARCHAR(50)=@MYVARIABLE
于 2012-08-15T14:20:14.177 回答