相关疑难解决方法(0)

表变量列中的nvarchar(max)与nvarchar(n)

在最终向用户呈现结果集之前,我对表变量做了很多工作.例如,我可能从许多不同的表中拉入一大堆列,如下所示:

DECLARE @tmp TABLE
(
ID int,
username nvarchar(50),  -- data taken from tbl_Users
site nvarchar(50),      -- data taken from tbl_Sites
region nvarchar(100),   -- data taken from tbl_Regions
currency nvarchar(5)    -- data taken from tbl_Currencies
)
Run Code Online (Sandbox Code Playgroud)

我花了很多时间浏览对象资源管理器以确保列的数据长度正确(与原始表匹配).有时,如果我更改表模式但不更新所有过程,我可能会遇到截断错误.

采取懒惰的做法是否有任何问题:

DECLARE @tmp TABLE
(
ID int,
username nvarchar(max),
site nvarchar(max),
region nvarchar(max),
currency nvarchar(max)
)
Run Code Online (Sandbox Code Playgroud)

nvarchar(max)实际上是否会消耗更多内存或根据数据大小分配内存?还有其他陷阱吗?

请注意,我知道跳转到定义的第三方工具,但这不是我要求的.

UPDATE

重复的问题有价值,但问题不一样恕我直言.副本围绕实际表的设计而不是表变量.但是,答案中有一些优点,即:

  • nvarchar(max)vs nvarchar(8000)在资源使用方面没有差异,直到8000+数据长度
  • 业务逻辑层依赖于结构和有意义的数据,因此指定与原始值相称的列大小可提供值

从这个意义上讲,似乎可以nvarchar(max)在表变量中使用而不是nvarchar(n),但在某些环境中它具有可靠性和性能风险.如果你认为这应该被删除然后公平(但请停止争论我欣赏所有输入!)

t-sql sql-server sql-server-2012

4
推荐指数
1
解决办法
2522
查看次数

通过选择ntext作为所有文本列的数据类型是否存在缺点?

可能重复:
总是使用nvarchar(MAX)有什么缺点吗?

通过选择'ntext'作为列类型而不是包含字符但具有有限的最大大小(如'char'或'varchar')的类型,是否存在一般性缺点?

我不确定有限的列大小是否适用于我的所有列.因此,我会对包含文本的所有列使用'ntext'.这可能导致将来出现问题吗?

(我在ASP.net Webforms应用程序中使用Linq-To-SQL)

database asp.net sql-server-2008 linq-to-sql

3
推荐指数
1
解决办法
839
查看次数

是否有任何理由不对所有文本字段使用ntext

是否有任何理由不使用ntext并且不为所有文本输入字段指定最大长度?

sql-server

2
推荐指数
1
解决办法
657
查看次数

关于使用NVARCHAR(MAX)

我有一个数据库,其中有很多字符串列.我应该使用NVARCHAR(MAX)还是将字符串限制为合理的最大值,例如NVARCHAR(100)等?我真正想知道的是,如果我将列设置为NVARCHAR(MAX)并且该列的所有值都是100个字符或更少,那么我可以通过将该列设置为NVARCHAR(100)来节省空间吗?

我知道spac不是这里唯一的问题,数据的"验证"也很重要,但我只是在询问空间问题.

sql-server-2012

2
推荐指数
1
解决办法
4064
查看次数