когда использование varchar оценивает потребности SQL Server дополнительные 2 байта за строку для хранения некоторой информации о том столбце, тогда как при использовании символа этому не нужно это поэтому если Вы
Это может незначительно отличаться в зависимости от версии SQL Server, но это будет работать в 2005 году:
SELECT
COUNT(*)
FROM
<database name>.sys.columns
WHERE
object_id = OBJECT_ID('<database name>.<owner>.<table name>')
В 2000 году:
SELECT
COUNT(*)
FROM
<database name>.sysobjects o
INNER JOIN <database name>.syscolumns c ON
c.id = o.id
WHERE
o.name = '<table name>'
Если у вас может быть несколько таблиц с одинаковым точным именем таблицы под разными владельцами вам нужно будет это учесть. Я забываю имя столбца в sysobjects, чтобы взглянуть на него сверху вниз.
ОБНОВЛЕНИЕ ДЛЯ НОВЫХ ВЕРСИЙ SQL Server и соответствия ANSI:
SELECT COUNT(*)
FROM
<database name>.INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = '<table schema>' AND
TABLE_NAME = '<table name>'
Вы можете (и должны) это сделать - постарайтесь избегать использования представления «sysobjects» - оно больше не поддерживается и может быть удалено в SQL Server 2008 R2 или более поздних версиях.
Вместо этого, используйте представление каталога "sys" в базе данных:
SELECT COUNT(*)
FROM yourdatabase.sys.columns
WHERE object_id = OBJECT_ID('yourdatabase.dbo.tablename')
Это должно помочь, и это, вероятно, самый простой и быстрый способ сделать это.
Как насчет
select count(*) from <database name.information_schema.columns where table_name = '<table_name>'