Quero escrever uma consulta para o MS SQL Server que adicione uma coluna em uma tabela. Mas não quero exibir nenhum erro quando executo / executo a seguinte consulta.
Estou usando esse tipo de consulta para adicionar uma tabela ...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
Mas não sei como escrever esta consulta para uma coluna.
sql-server
add
not-exists
Tavousi
fonte
fonte
sys.tables
em vez do "genérico"sys.objects
- então você não tem que especificar o tipo explicitamente (é óbvio a partir dosys.tables
já ....)Respostas:
Você pode usar uma construção semelhante usando a
sys.columns
tabela iosys.objects
.fonte
EXISTS
cláusula são idênticos. Coisas comoSELECT 1
ouSELECT TOP 1
são desnecessárias. AEXISTS
própria cláusula informa ao otimizador de consulta para executar apenas as leituras mínimas necessárias para avaliar oEXISTS
... pelo menos no SQL Server. Outros mecanismos de banco de dados podem ter um otimizador de consulta mais ou menos eficiente.ADD Column
consultas ... deve executá-las com muita frequência!fonte
COL_LENGTH('table_name', '[column_name]')
sempre retorna nulo no SQL Server 2016 (COL_LENGTH('[table_name]', 'column_name') works as expected
).Outra alternativa. Eu prefiro essa abordagem porque é menos escrita, mas as duas realizam a mesma coisa.
Notei também que o seu está procurando onde existe uma tabela que obviamente é exatamente essa
fonte
Aqui está outra variação que funcionou para mim.
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS....
fonte
Espero que isso ajude. Mais informações
fonte
Ao procurar uma coluna em outro banco de dados, você pode simplesmente incluir o nome do banco de dados:
fonte
fonte