Мне нужно добавить определенный столбец, если он не существует. У меня есть что-то вроде следующего, но всегда возвращает false:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
Как я могу проверить, существует ли столбец в таблице базы данных SQL Server?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
отлично работает.EXEC sp_executesql
с сформированнымUPDATE
утверждением.FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Ответы:
SQL Server 2005 и более поздних версий:
Версия Мартина Смита короче:
источник
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
должны быть без кавычек. Теоретически возможно для кого-то создать столбец, который на самом деле имеет имя[COLUMN_NAME]
- например,CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
и тогда было бы неоднозначно, если бы это не было правилом.Более краткая версия
Пункт о разрешениях на просмотр метаданных относится ко всем ответам, а не только к этому.
Обратите внимание, что первое имя таблицы параметров
COL_LENGTH
может быть в формате имени из одной, двух или трех частей в соответствии с требованиями.Пример ссылки на таблицу в другой базе данных:
Одно из отличий этого ответа от использования представлений метаданных состоит в том, что такие функции метаданных, как
COL_LENGTH
всегда, возвращают только данные о совершенных изменениях, независимо от действующего уровня изоляции.источник
IF OBJECT_ID('TableName','U') IS NULL
для проверки существования объекта илиDB_ID('foo')
для проверки существования базы данных.x>>2
вместоx/4
С ++. Более подробный код (if exists (select column_name from information_schema ...)
) занимает намного больше места, но никто бы никогда не почесал голову, пытаясь понять, что он делает.INFORMATION_SCHEMA
просмотрам илиsys.columns
попаданиям на диск приCOL_LENGTH
использовании метаданных кэшированной базы данных.Настройте ниже, чтобы удовлетворить ваши конкретные требования:
Правка, чтобы справиться с правкой на вопрос : это должно сработать - внимательно осмотрите свой код на наличие глупых ошибок; Вы запрашиваете INFORMATION_SCHEMA в той же базе данных, к которой применяется ваша вставка, например? У вас есть опечатка в названии таблицы / столбца в любом утверждении?
источник
Попробуй это...
источник
SELECT 1
вместоSELECT TOP 1 1
;).EXISTS
оператора SQL автоматически оптимизирует удаленные столбцы (очень похожеcount(*)
), поэтому этогоSELECT *
будет достаточно.and [TABLE_SCHEMA] = '???'
в предложение WHERE.Для людей, которые проверяют существование столбца, чтобы бросить его.
С SQL Server 2016 вы можете использовать новые операторы DIE вместо больших
IF
оболочекисточник
Я бы предпочел
INFORMATION_SCHEMA.COLUMNS
системную таблицу, потому что Microsoft не гарантирует сохранение системных таблиц между версиями. Например,dbo.syscolumns
все еще работает в SQL 2008, но он устарел и может быть удален в любое время в будущем.источник
INFORMATION_SCHEMA
представления содержат только метаданные стандарта ANSI. Однако этого достаточно для проверки существования.Вы можете использовать системные представления информационной схемы, чтобы узнать практически все о таблицах, которые вас интересуют:
Вы также можете опросить представления, хранимые процедуры и почти все, что касается базы данных, используя представления Information_schema.
источник
Попробуйте что-то вроде:
Тогда используйте это так:
Он должен работать как на SQL Server 2000, так и на SQL Server 2005. Не уверен насчет SQL Server 2008, но не вижу почему.
источник
Сначала проверьте, существует ли комбинация
table
/column
(id
/name
) вdbo.syscolumns
(внутренняя таблица SQL Server, содержащая определения полей), и если нет, введите соответствующийALTER TABLE
запрос для ее добавления. Например:источник
Один мой хороший друг и коллега показал мне, как можно также использовать
IF
блок с функциями SQLOBJECT_ID
иCOLUMNPROPERTY
в SQL SERVER 2005+ для проверки столбца. Вы можете использовать что-то похожее на следующее:Вы можете увидеть здесь
источник
COLUMNPROPERTY
только проверку .источник
Это работало для меня в SQL 2000:
источник
Попробуй это
источник
INFORMATION_SCHEMA.TABLES
и вы не фильтруете столбцы для конкретной таблицы, поэтому иногда она возвращает более одной строки для одинаковых имен столбцов в отдельных таблицах;).Мне нужно подобное для SQL SERVER 2000, и, как указывает @Mitch, это работает только в 2005+.
Должно ли это помочь кому-то еще, вот что в итоге сработало для меня:
источник
источник
источник
Версия принятого ответа во временной таблице :
источник
источник
Ответ Уитя хороший, но предполагается, что в любой схеме или базе данных нет идентичных пар «имя таблицы / имя столбца». Чтобы сделать это безопасным для этого условия, используйте это ...
источник
Есть несколько способов проверить наличие столбца. Я настоятельно рекомендую использовать
INFORMATION_SCHEMA.COLUMNS
как он создан для общения с пользователем. Рассмотрим следующие таблицы:и даже некоторые другие методы доступа, доступные для проверки
system catalog.
Кроме того, не нужно использовать
SELECT *
, просто проверьте егоNULL value
источник
SELECT *
сEXISTS
, потому что , когда существует используются не реально выбрать все строки и все столбцы, внутренне он просто проверяет существование и фактически не проверяет все строки и столбцыОдним из самых простых и понятных решений является:
источник
Вот простой скрипт, который я использую для управления добавлением столбцов в базе данных:
В этом примере,
Name
этоColumnName
должен быть добавлен иObject_Id
являетсяTableName
источник
Приведенный ниже запрос может быть использован для проверки наличия или отсутствия в таблице искомого столбца. Мы можем принять решение на основе результатов поиска, как показано ниже.
источник
Еще один вариант ...
источник
таблица -> таблица сценариев как -> новые окна - у вас есть сценарий дизайна. проверить и найти имя столбца в новых окнах
источник
Выполните приведенный ниже запрос, чтобы проверить, существует ли столбец в данной таблице:
источник
Другим вкладом является следующий пример, который добавляет столбец, если он не существует.
Надеюсь, поможет. Симона
источник
источник
источник
Сделайте что-нибудь, если столбец не существует:
Сделайте что-нибудь, если столбец существует:
источник