-- relates to this DBA.StackExchange answer: http://dba.stackexchange.com/questions/110813/8kb-row-size-limits-ignored-but-only-sometimes/110834#110834
-- DDL to create the table used below is found in that answer. Run that first.
DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 22)); -- all 3 INSERTs work!
--DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 24)); -- all 3 INSERTs fail.
--DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 30)); -- all 3 INSERTs fail.
--DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 9000)); -- all 3 INSERTs fail.
SELECT DATALENGTH(@Bob);
INSERT INTO dbo.test VALUES (
NEWID(), NEWID(), -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
GETDATE(), GETDATE(), -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
);
-- Msg 511, Level 16, State 1, Line 22
-- Cannot create a row of size 8391 which is greater than the allowable maximum row size of 8060.
INSERT INTO dbo.test VALUES (
NULL, NULL, -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
NULL, NULL, -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
);
-- Msg 511, Level 16, State 1, Line 62
-- Cannot create a row of size 8391 which is greater than the allowable maximum row size of 8060.
INSERT INTO dbo.test VALUES (
NULL, NULL, -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
NULL, NULL, -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
NULL, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, -- First VARBINARY col is NULL, taking up no space
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
@Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
);
-- Msg 511, Level 16, State 1, Line 102
-- Cannot create a row of size 8367 which is greater than the allowable maximum row size of 8060.
-- Changing 1 VARBINARY(MAX) to NULL reduced size by 24 bytes
Comments