- "source": "SET NOCOUNT ON;\r\nGO\r\n\r\nUSE WideWorldImporters\r\nGO\r\n\r\nDROP TABLE IF EXISTS #tmpObjects;\r\nGO\r\n\r\nCREATE TABLE #tmpObjects (ObjectName sysname, \r\n\tColumnName sysname, \r\n\tColumnType sysname, \r\n\tDefinedTypeSize smallint, \r\n\tActualMaxBytes smallint,\r\n\tUTF8BytesNeeded smallint,\r\n\t[isdone] bit,\r\n CONSTRAINT PK_ObjName_ColName\r\n PRIMARY KEY NONCLUSTERED (ObjectName, ColumnName)\r\n\t\tWITH (IGNORE_DUP_KEY = ON)\r\n\t);\r\n\r\nINSERT INTO #tmpObjects\r\nSELECT QUOTENAME(SS.[name]) + '.' + QUOTENAME(STbl.[name]), QUOTENAME(SC.[name]), ST.[name], SC.max_length, NULL, NULL, 0\r\nFROM sys.columns AS SC\r\nINNER JOIN sys.types AS ST ON SC.user_type_id = ST.user_type_id\r\nINNER JOIN sys.tables AS STbl ON STbl.[object_id] = SC.[object_id]\r\nINNER JOIN sys.schemas AS SS ON STbl.[schema_id] = SS.[schema_id]\r\nWHERE STbl.[type] = 'U' \r\n\tAND STbl.is_ms_shipped = 0\r\n\t--AND STbl.temporal_type IN (0,1)\r\n\tAND ST.system_type_id IN (167, 175, 231, 239)\r\n\tAND ST.[name] <> 'sysname'\r\n\tAND SC.is_hidden = 0\r\n\tAND SC.max_length > 0;\r\n\r\nDECLARE @OName sysname, @CName sysname, @CurrBytes smallint, @UTF8Bytes smallint, @sqlcmd NVARCHAR(4000), @params NVARCHAR(60), @cnt int, @maxcnt int\r\n\r\nSELECT @maxcnt = COUNT(*) FROM #tmpObjects;\r\nSET @cnt = 0 \r\nSET @params = '@CurrBytesOut smallint OUTPUT, @UTF8BytesOut smallint OUTPUT'\r\n\r\nWHILE @cnt < @maxcnt\r\nBEGIN\r\n\tSELECT TOP 1 @OName = ObjectName, @CName = ColumnName FROM #tmpObjects WHERE isdone = 0\r\n\tSELECT @sqlcmd = 'SELECT @CurrBytesOut = MAX(DATALENGTH(' + @CName + ')), @UTF8BytesOut = MAX(DATALENGTH(CAST(' + @CName + ' AS VARCHAR(4000)) COLLATE Latin1_General_100_CI_AI_SC_UTF8)) FROM ' + @OName; \r\n\r\n\tEXEC sp_executesql @sqlcmd, @params, @CurrBytesOut = @CurrBytes OUTPUT, @UTF8BytesOut = @UTF8Bytes OUTPUT\r\n\r\n\tUPDATE #tmpObjects\r\n\tSET ActualMaxBytes = @CurrBytes, UTF8BytesNeeded = @UTF8Bytes, isdone = 1 \r\n\tWHERE ObjectName = @OName AND ColumnName = @CName\r\n\r\n\tSET @cnt = @cnt + 1\r\nEND;\r\n\r\nSELECT * FROM #tmpObjects;",
0 commit comments