Estou com um probleminha... possuo 2 tabelas (que deveriam ser idênticas, para armazenar dados de backup, porém nem sempre estão), preciso que antes que a tabela2 seja atualizada, seja verificado se tabela1 e tabela2 possuem as mesmas colunas. Desenvolvi o código abaixo, porém, ao executar o comando ALTER TABLE utilizando as variáveis (tanto caso 1 como 2) recebo erro de syntax incorreta após o ADD :wacko: ... Ajudas serão muito bem vindas!
Pergunta
Guest Ripper
Olá!
Estou com um probleminha... possuo 2 tabelas (que deveriam ser idênticas, para armazenar dados de backup, porém nem sempre estão), preciso que antes que a tabela2 seja atualizada, seja verificado se tabela1 e tabela2 possuem as mesmas colunas. Desenvolvi o código abaixo, porém, ao executar o comando ALTER TABLE utilizando as variáveis (tanto caso 1 como 2) recebo erro de syntax incorreta após o ADD :wacko: ... Ajudas serão muito bem vindas!
/* Inicio do código... */
DECLARE @TableName VARCHAR(100), @ColumnName VARCHAR(100), @Tipo VARCHAR(50)
DECLARE @Tamanho Float
DECLARE @Script VARCHAR(100)
DECLARE CursorTesteD1 CURSOR FOR
SELECT SO.Name, SC.Name, SC.Length, ST.Name
FROM SysObjects SO (NoLock)
INNER JOIN SysColumns SC (NoLock) on SC.ID = SO.ID
INNER JOIN SysTypes ST (NoLock) on ST.XType = SC.XType
WHERE SO.Name = 'TesteD1'
AND ST.Name <> 'sysname'
ORDER BY SC.Name ASC
OPEN CursorTesteD1
FETCH CursorTesteD1 INTO @TableName, @ColumnName, @Tamanho, @Tipo
WHILE (@@fetch_status = 0)
BEGIN
IF NOT EXISTS(SELECT TOP 1 SO.Name, SO.ID, SC.Name, SC.Xtype, SC.Length, ST.Name
FROM SysObjects SO (NoLock)
INNER JOIN SysColumns SC (NoLock) on SC.ID = SO.ID
INNER JOIN SysTypes ST (NoLock) on ST.XType = SC.XType
WHERE SO.Name = 'TesteD2'
AND ST.Name <> 'sysname'
AND SC.Name = @ColumnName
ORDER BY SC.Name ASC)
BEGIN
SET @Script = NULL
PRINT 'Criando coluna: ' + @ColumnName
PRINT 'Tamanho: ' + CAST(@Tamanho as VARCHAR)
PRINT 'Tipo: ' + @Tipo
SET @Script = @ColumnName + ' ' + @Tipo + '('+ CAST(@Tamanho AS VARCHAR) + ') NULL'
PRINT @Script
-- Caso 1 => ALTER TABLE TesteD2 ADD @ColumnName @Tipo(@Tamanho) NULL
-- Caso 2 => ALTER TABLE TesteD2 ADD @Script
END
FETCH CursorTesteD1 INTO @TableName, @ColumnName, @Tamanho, @Tipo
END
CLOSE CursorTesteD1
DEALLOCATE CursorTesteD1
/* Fim do código */
Valeu!
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.