我正在调整一个审计方案:https://weblogs.asp.net/jongalloway/adding-simple-trigger-based-auditing-to-your-sql-server-database要求创建这样的审计表:
CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),
PrimaryKeyField varchar(1000),
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserNamevarchar(128)
)
我想确保为插入到Audit
表中的每一行存储尽可能少的内容。就我而言,我可以缩短 , , 的宽度,因为我TableName
知道这些东西的实际最大长度。我有一个特定的表,它有一个定义为 nvarchar(2000) 的特定列,所以如果我继续使用这种通用方法,我将需要使用 nvarchar(2000)和.PrimaryKeyField
PrimaryKeyValue
FieldName
OldValue
NewValue
我想知道 SQL Server 关于页面中实际使用的存储空间的内部优化。当使用 long varchars 或 nvarchars 存储行时,是实际用于将行存储在页面中的完整定义长度,还是 SQL Server 仅存储实际使用的字节。例如,如果只Hello!
存储在上面,那么这样一行在页面中实际占用OldValue
多少字节?OldValue