Preciso adicionar uma coluna específica se ela não existir. Eu tenho algo como o seguinte, mas sempre retorna false:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
Como posso verificar se existe uma coluna em uma tabela do banco de dados do SQL Server?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
funciona bem.EXEC sp_executesql
com aUPDATE
declaração formada .FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Respostas:
SQL Server 2005 em diante:
A versão de Martin Smith é mais curta:
fonte
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
precisam ser sem aspas. Teoricamente, é possível alguém criar uma coluna que realmente tenha um nome de[COLUMN_NAME]
- por exemplo,CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
e seria ambíguo se essa não fosse a regra.Uma versão mais concisa
O ponto sobre as permissões na exibição de metadados se aplica a todas as respostas, não apenas a esta.
Observe que o primeiro nome da tabela de parâmetros
COL_LENGTH
pode estar no formato de nome de uma, duas ou três partes, conforme necessário.Um exemplo de referência a uma tabela em um banco de dados diferente é
Uma diferença com esta resposta em comparação ao uso das visualizações de metadados é que as funções de metadados, como
COL_LENGTH
sempre, retornam apenas dados sobre alterações confirmadas, independentemente do nível de isolamento em vigor.fonte
IF OBJECT_ID('TableName','U') IS NULL
para verificar a existência do objeto ouDB_ID('foo')
para verificar a existência do banco de dados.x>>2
vez dex/4
em C ++. O código mais detalhado (if exists (select column_name from information_schema ...)
) ocupa muito mais espaço, mas ninguém jamais arranhava a cabeça tentando descobrir o que faz.INFORMATION_SCHEMA
visualizações ou acessando osys.columns
disco, enquantoCOL_LENGTH
usa metadados do banco de dados em cache.Ajuste o abaixo para atender às suas necessidades específicas:
Editar para lidar com a edição da pergunta : Isso deve funcionar - observe cuidadosamente seu código para erros estúpidos; você está consultando INFORMATION_SCHEMA no mesmo banco de dados ao qual sua inserção está sendo aplicada, por exemplo? Você tem um erro de digitação no nome da tabela / coluna em qualquer uma das instruções?
fonte
Tente isso ...
fonte
SELECT 1
vez deSELECT TOP 1 1
;).EXISTS
instrução, o SQL otimiza automaticamente as colunas (muito parecidascount(*)
), assimSELECT *
será suficiente.and [TABLE_SCHEMA] = '???'
à cláusula WHERE.Para as pessoas que estão verificando a existência da coluna, solte-a.
No SQL Server 2016, você pode usar novas instruções DIE em vez de grandes
IF
invólucrosfonte
Eu preferiria
INFORMATION_SCHEMA.COLUMNS
uma tabela do sistema porque a Microsoft não garante a preservação das tabelas do sistema entre as versões. Por exemplo,dbo.syscolumns
ainda funciona no SQL 2008, mas está obsoleto e pode ser removido a qualquer momento no futuro.fonte
INFORMATION_SCHEMA
visualizações contêm apenas metadados padrão ANSI. No entanto, isso é suficiente para um teste de existência.Você pode usar as visualizações do sistema de esquema de informações para descobrir praticamente tudo sobre as tabelas em que está interessado:
Você também pode interrogar visualizações, procedimentos armazenados e praticamente qualquer coisa sobre o banco de dados usando as visualizações Information_schema.
fonte
Tente algo como:
Em seguida, use-o assim:
Ele deve funcionar no SQL Server 2000 e no SQL Server 2005. Não tem certeza sobre o SQL Server 2008, mas não vê por que não.
fonte
Primeiro verifique se a combinação
table
/column
(id
/name
) existe emdbo.syscolumns
(uma tabela interna do SQL Server que contém definições de campo) e, se não, emita aALTER TABLE
consulta apropriada para adicioná-la. Por exemplo:fonte
Um bom amigo e colega me mostrou como você também pode usar um
IF
bloco com funções SQLOBJECT_ID
eCOLUMNPROPERTY
no SQL SERVER 2005+ para verificar uma coluna. Você pode usar algo semelhante ao seguinte:Você pode ver por si mesmo aqui
fonte
COLUMNPROPERTY
apenas.fonte
Isso funcionou para mim no SQL 2000:
fonte
Tente isto
fonte
INFORMATION_SCHEMA.TABLES
e não filtra colunas para uma tabela específica; portanto, às vezes, retorna mais de uma linha para os mesmos nomes de coluna em tabelas separadas;).Eu precisava de algo semelhante para o SQL SERVER 2000 e, como o @Mitch aponta, isso só funciona em 2005+.
Deveria ajudar mais alguém, foi o que funcionou para mim no final:
fonte
fonte
fonte
Uma versão de tabela temporária da resposta aceita :
fonte
fonte
A resposta do trigo é boa, mas assume que você não possui pares de nome de tabela / nome de coluna idênticos em qualquer esquema ou banco de dados. Para torná-lo seguro para essa condição, use este ...
fonte
Existem várias maneiras de verificar a existência de uma coluna. Eu recomendo fortemente usar
INFORMATION_SCHEMA.COLUMNS
como ele é criado para se comunicar com o usuário. Considere as seguintes tabelas:e até alguns outros métodos de acesso disponíveis para verificar
system catalog.
Além disso, não há necessidade de usar
SELECT *
, basta testá-loNULL value
fonte
SELECT *
comEXISTS
, porque quando existe é usado ele realmente não selecione todas as linhas e todas as colunas, internamente ele apenas verifica a existência e na verdade não verifica a existência de todas as linhas e colunasUma das soluções mais simples e compreensíveis é:
fonte
Aqui está um script simples que eu uso para gerenciar a adição de colunas no banco de dados:
Neste exemplo, o
Name
é oColumnName
a ser adicionado eObject_Id
é oTableName
fonte
A consulta abaixo pode ser usada para verificar se a coluna pesquisada existe ou não na tabela. Podemos tomar uma decisão com base no resultado pesquisado também como mostrado abaixo.
fonte
Ainda outra variação ...
fonte
tabela -> tabela de scripts como -> novas janelas - você possui um script de design. verifique e encontre o nome da coluna em novas janelas
fonte
Execute a consulta abaixo para verificar se a coluna existe na tabela fornecida:
fonte
Outra contribuição é o exemplo a seguir que adiciona a coluna, se não existir.
Espero que ajude. Simone
fonte
fonte
fonte
Faça algo se a coluna não existir:
Faça algo se a coluna existir:
fonte