SqlQuantumLeap

Tests for exceeding max row size from too many MAX fields

Aug 13th, 2015
105
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- relates to this DBA.StackExchange answer: http://dba.stackexchange.com/questions/110813/8kb-row-size-limits-ignored-but-only-sometimes/110834#110834
  2. -- DDL to create the table used below is found in that answer. Run that first.
  3.  
  4. DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 22)); -- all 3 INSERTs work!
  5. --DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 24)); -- all 3 INSERTs fail.
  6. --DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 30)); -- all 3 INSERTs fail.
  7. --DECLARE @Bob VARBINARY(MAX) = CONVERT(VARBINARY(MAX), REPLICATE(CONVERT(VARCHAR(MAX), 'A'), 9000)); -- all 3 INSERTs fail.
  8.  
  9. SELECT DATALENGTH(@Bob);
  10.  
  11. INSERT INTO dbo.test VALUES (
  12.       NEWID(), NEWID(), -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
  13.       GETDATE(), GETDATE(), -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
  14.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  15.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  16.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  17.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  18.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  19.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  20.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  21.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  22.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  23.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  24.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  25.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  26.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  27.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  28.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  29.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  30.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  31.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  32.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  33.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  34.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  35.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  36.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  37.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  38.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  39.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  40.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  41.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  42.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  43.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  44.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  45.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
  46. );
  47. -- Msg 511, Level 16, State 1, Line 22
  48. -- Cannot create a row of size 8391 which is greater than the allowable maximum row size of 8060.
  49.  
  50.  
  51. INSERT INTO dbo.test VALUES (
  52.       NULL, NULL, -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
  53.       NULL, NULL, -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
  54.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  55.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  56.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  57.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  58.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  59.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  60.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  61.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  62.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  63.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  64.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  65.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  66.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  67.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  68.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  69.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  70.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  71.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  72.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  73.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  74.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  75.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  76.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  77.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  78.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  79.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  80.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  81.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  82.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  83.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  84.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  85.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
  86. );
  87. -- Msg 511, Level 16, State 1, Line 62
  88. -- Cannot create a row of size 8391 which is greater than the allowable maximum row size of 8060.
  89.  
  90.  
  91. INSERT INTO dbo.test VALUES (
  92.       NULL, NULL, -- UNIQUEIDENTIFIER cols: 16 bytes each, even when NULL (without SPARSE or COMPRESSION)
  93.       NULL, NULL, -- DATETIME cols: 8 bytes each, even when NULL (without SPARSE or COMPRESSION)
  94.       NULL, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, -- First VARBINARY col is NULL, taking up no space
  95.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  96.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  97.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  98.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  99.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  100.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  101.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  102.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  103.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  104.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  105.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  106.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  107.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  108.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  109.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  110.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  111.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  112.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  113.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  114.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  115.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  116.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  117.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  118.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  119.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  120.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  121.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  122.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  123.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  124.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob,
  125.       @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob, @Bob
  126. );
  127. -- Msg 511, Level 16, State 1, Line 102
  128. -- Cannot create a row of size 8367 which is greater than the allowable maximum row size of 8060.
  129.  
  130. -- Changing 1 VARBINARY(MAX) to NULL reduced size by 24 bytes
RAW Paste Data