Return NVARCHAR 或 VARCHAR 变量定义的长度
Return length of NVARCHAR or VARCHAR variable definition
我在存储过程中声明了一个变量:
DECLARE @CurrentChunk NVARCHAR(250)
我想使用变量的长度,即 250
,稍后在我的 sp 中用于计算目的,我想尽可能保持我的代码为 dry。
这是我的代码(假设 @Narrative
是 SP 的参数):
DECLARE @ChunkSizeCharacters INT,
@NumChunks INT,
@LoopIndex INT,
@CurrentChunk NVARCHAR(250)
SET @ChunkSizeCharacters = 250 -- HERE'S WHERE I WANT THE LENGTH OF @CurrentChunk
SET @NumChunks = CEILING((LEN(@Narrative) * 1.0)/@ChunkSizeCharacters)
SET @LoopIndex = 0;
WHILE (@LoopIndex < @NumChunks)
BEGIN
SET @CurrentChunk = SUBSTRING(@Narrative,
((@LoopIndex * @ChunkSizeCharacters) + 1), @ChunkSizeCharacters)
INSERT INTO [dbo].[Chunks] ([Chunk]) VALUES (@CurrentChunk)
SET @LoopIndex = @LoopIndex + 1
END
有没有办法确定NVARCHAR
或VARCHAR
变量的长度定义(请仔细阅读——我不是在寻找LEN()
)?
如果您不介意覆盖变量(如果您这样做,您可以将其分配给一个临时变量 NVARCHAR(MAX)
):
SELECT @CurrentChunk = REPLICATE(0, 8000);
SELECT @ChunkSizeCharacters = LEN(@CurrentChunk);
这个技巧对 NVARCHAR(MAX)
没有也不能奏效,但这应该没问题,因为它的最大尺寸非常大。
不幸的是,T-SQL 没有任何变量的元数据属性。甚至确定表达式的类型也是一件苦差事。
MaxLength 变体 属性 returns 似乎是您要查找的值。
DECLARE @Banana varchar(255) = 'This banana'
SELECT SQL_VARIANT_PROPERTY(@Banana, 'MaxLength')
Returns255.
有趣的是,SELECT SQL_VARIANT_PROPERTY 语句返回的值不会 select 到一个普通的预定义变量中。最后,我使用了:
DECLARE @Text VARCHAR(400), @TextLen INT
SELECT @TextLen = CAST(SQL_VARIANT_PROPERTY(ISNULL(@Text, ''), 'MaxLength') AS INT)
对我来说就像一个魅力!
我在存储过程中声明了一个变量:
DECLARE @CurrentChunk NVARCHAR(250)
我想使用变量的长度,即 250
,稍后在我的 sp 中用于计算目的,我想尽可能保持我的代码为 dry。
这是我的代码(假设 @Narrative
是 SP 的参数):
DECLARE @ChunkSizeCharacters INT,
@NumChunks INT,
@LoopIndex INT,
@CurrentChunk NVARCHAR(250)
SET @ChunkSizeCharacters = 250 -- HERE'S WHERE I WANT THE LENGTH OF @CurrentChunk
SET @NumChunks = CEILING((LEN(@Narrative) * 1.0)/@ChunkSizeCharacters)
SET @LoopIndex = 0;
WHILE (@LoopIndex < @NumChunks)
BEGIN
SET @CurrentChunk = SUBSTRING(@Narrative,
((@LoopIndex * @ChunkSizeCharacters) + 1), @ChunkSizeCharacters)
INSERT INTO [dbo].[Chunks] ([Chunk]) VALUES (@CurrentChunk)
SET @LoopIndex = @LoopIndex + 1
END
有没有办法确定NVARCHAR
或VARCHAR
变量的长度定义(请仔细阅读——我不是在寻找LEN()
)?
如果您不介意覆盖变量(如果您这样做,您可以将其分配给一个临时变量 NVARCHAR(MAX)
):
SELECT @CurrentChunk = REPLICATE(0, 8000);
SELECT @ChunkSizeCharacters = LEN(@CurrentChunk);
这个技巧对 NVARCHAR(MAX)
没有也不能奏效,但这应该没问题,因为它的最大尺寸非常大。
不幸的是,T-SQL 没有任何变量的元数据属性。甚至确定表达式的类型也是一件苦差事。
MaxLength 变体 属性 returns 似乎是您要查找的值。
DECLARE @Banana varchar(255) = 'This banana'
SELECT SQL_VARIANT_PROPERTY(@Banana, 'MaxLength')
Returns255.
有趣的是,SELECT SQL_VARIANT_PROPERTY 语句返回的值不会 select 到一个普通的预定义变量中。最后,我使用了:
DECLARE @Text VARCHAR(400), @TextLen INT
SELECT @TextLen = CAST(SQL_VARIANT_PROPERTY(ISNULL(@Text, ''), 'MaxLength') AS INT)
对我来说就像一个魅力!