DECLARE @tableName NVARCHAR(50)= 'tablename';
DECLARE @tmpTable TABLE
(
ColumnName NVARCHAR(50) NOT NULL PRIMARY KEY ,
ColumnMaxLen INT NOT NULL
);
INSERT @tmpTable
SELECT COLUMN_NAME ,
0
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName;
DECLARE @columnName NVARCHAR(50);
DECLARE @columnMaxLen INT;
DECLARE @sql NVARCHAR(MAX);
DECLARE tmpCursor CURSOR
FOR
SELECT ColumnName
FROM @tmpTable FOR READ ONLY;
OPEN tmpCursor;
FETCH NEXT FROM tmpCursor INTO @columnName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'SELECT @columnMaxLen=ISNULL(MAX(LEN([' + @columnName
+ '])), 0) FROM ' + @tableName;
-- PRINT @sql;
EXEC sp_executesql @sql, N'@columnMaxLen int out', @columnMaxLen OUT;
UPDATE @tmpTable
SET ColumnMaxLen = @columnMaxLen
WHERE ColumnName = @columnName;
FETCH NEXT FROM tmpCursor INTO @columnName;
END;
CLOSE tmpCursor;
DEALLOCATE tmpCursor;
SELECT *
FROM @tmpTable;