有没有办法在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' 该怎么做(并保持我的变量)
我可以删除当前的并创建一个新的吗?
答案 0 :(得分: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
显然,如果变量再次传递有一些限制,但除此之外,唯一的另一种方法是将源变量长度更改为更合理的值。实际上,没有太多理由让变量如此小。
答案 1 :(得分:0)
你可以使用临时变量:
DECLARE @MYVARIABLE AS VARCHAR(3)
DECLARE @myVal as VARCHAR(50)=@MYVARIABLE
答案 2 :(得分: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
由于你无法改变声明变量的方式,你将不得不放弃这种尝试的方法解决你的整体问题(但我不能提供建议,因为你没有描述你的整体问题)