(n)varchar(max)
我对(n)varchar(<explicit-size>)
T-SQL 代码(存储过程、函数)的“效率”(速度、内存使用)有疑问。我不是在询问它在列定义中的用法。
在现有代码中,我注意到很多类似的情况,比如:
CREATE TABLE [table] (
[column] nvarchar(1000)
)
DECLARE @var nvarchar(2000)
SELECT @var = [column] FROM TABLE WHERE ...
SET @var = @var + @somethingelse + @anotherthing ...
SET @var = REPLACE(@var, N'search', N'lotstoreplacewith')
...
要点是(以上只是一个例子)我最终会从有限大小的字符串列中构建更长的字符串。很难/不方便知道和维护这些字符串可能会变得多大。
因此,如果我改为将这些 T-SQL 变量声明为nvarchar(max)
. 然后我不必担心它们可以达到的最大尺寸。它们类似于编程语言的“无限”字符串大小。
有人知道 SQL Server 如何“有效”地处理操作声明的变量的代码(n)varchar(max)
吗?例如,它是否为这样的变量保留了大量空间(我希望它纯粹动态地处理它),或者CAST/CONVERT()
使用它的字符串函数是否会受到一些性能损失?[如果相关,我必须支持 SQL Server 2008 R2 及更高版本。]
[编辑:有人建议我的问题与总是使用 nvarchar(MAX) 有什么缺点吗?. 但是,除一篇文章外,其他所有文章都varchar(max)
在列定义中引用,我的问题明确指出我正在询问T-SQL 代码(变量等)的性能。我在下面的问题上发布了一个答案(因为它很大),它借鉴了该帖子并用一些新信息对其进行了扩展。]