Tabela SQL Alter modifique os valores
-
18-09-2019 - |
Pergunta
Eu tenho um script SQL em que estou trabalhando e encontro um problema ao criar (ou editar) uma coluna e, em seguida, tentando modificar essa nova coluna.
Por exemplo:
BEGIN
ALTER TABLE SampleTable ADD ColumnThree int
END
IF (EXISTS (SELECT * FROM sys.columns WHERE name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
Agora eu pensei que os blocos iniciantes/end separariam esses dois itens, mas recebo um erro "Nome da coluna inválida 'ColumnThree'". Quando tento executar isso. Por quê? Não deve ser o primeiro início/final, não deve ser configurado na coluna e mais ao ponto em que o if (existe deve proteger a declaração de atualização de ser executada se esse nome de coluna não existir.
Qual é a maneira correta de fazer algo assim? (Parece que tenho alguns cenários semelhantes onde isso é necessário).
Solução
Você precisa GO
, não BEGIN/END
. Além disso, você pode querer editar seu EXISTS
Consulte um pouco para garantir que você esteja recebendo a tabela certa:
ALTER TABLE SampleTable ADD ColumnThree int
GO
IF (EXISTS
(SELECT 1
FROM
sys.columns c
INNER JOIN sys.tables t ON
c.object_id = t.object_id
WHERE
t.name = 'SampleTable'
AND c.name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
Se você estiver usando vários esquemas, você deseja passar sys.schemas
no cheque também.