Today I came across with an error with "Row-Overflow Data Exceeding 8 KB" when trying to update the value in a row.
Reason
MS
SQL server allows only 8060 bytes of data max to be stored in a row.
Hence your row size will always be <= 8060. But it is relaxed when a
table contains varchar, nvarchar, varbinary, sql_variant, or CLR
user-defined type colums.
Please see below query how to figure out which row takes how much space:
Please see below query how to figure out which row takes how much space:
- -- Declaring variables
- declare @table nvarchar(128);
- declare @idcol nvarchar(128);
- declare @sql nvarchar(max);
- --initialize those two values
- set @table = '[Person].[AddressType]'
- set @idcol = 'AddressTypeID, Name'
- set @sql = 'select ' + @idcol + ' , (0'
- -- This select statement collects all columns of a table and calculate datalength
- select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
- from sys.columns where object_id = object_id(@table)
- set @sql = @sql + ') as RowSize from ' + @table + ' order by rowsize desc'
- -- Execute sql query
- exec (@sql)
Result:
Above SQL query just collects all the columns present in a table and summing up the data size using datalength().
No comments:
Post a Comment