Вот обновленная версия запроса Брайана за 2008 год и позже. Он использует INFORMATION_SCHEMA.COLUMNS, добавляет переменные для схемы таблицы и имени таблицы. Тип данных столбца был добавлен в вывод. Включение типа данных столбца помогает при поиске столбца определенного типа данных. Я не добавил ширины столбцов или что-то в этом роде.
Для вывода используется RAISERROR ... WITH NOWAIT, поэтому текст будет отображаться сразу, а не сразу (по большей части) в конце, как PRINT ..
SET NOCOUNT ON;
DECLARE
@ColumnName sysname
,@DataType nvarchar(128)
,@cmd nvarchar(max)
,@TableSchema nvarchar(128) = 'dbo'
,@TableName sysname = 'TableName';
DECLARE getinfo CURSOR FOR
SELECT
c.COLUMN_NAME
,c.DATA_TYPE
FROM
INFORMATION_SCHEMA.COLUMNS AS c
WHERE
c.TABLE_SCHEMA = @TableSchema
AND c.TABLE_NAME = @TableName;
OPEN getinfo;
FETCH NEXT FROM getinfo INTO @ColumnName, @DataType;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = N'IF NOT EXISTS (SELECT * FROM ' + @TableSchema + N'.' + @TableName + N' WHERE [' + @ColumnName + N'] IS NOT NULL) RAISERROR(''' + @ColumnName + N' (' + @DataType + N')'', 0, 0) WITH NOWAIT;';
EXECUTE (@cmd);
FETCH NEXT FROM getinfo INTO @ColumnName, @DataType;
END;
CLOSE getinfo;
DEALLOCATE getinfo;
Вы должны выполнить эту команду из CLI, а не из консоли mysql
.