Todos nós que trabalhamos com banco de dados por varias vezes seguida temos a necessidade de repetir um mesmo conjunto de dados alterando apenas um ou dois campos da chave.
Esta tarefa é bem fácil quando estamos trabalhando com uma tabela com poucos campo.
Suponhamos que temos a tabela TPT210 que contém um campo CDMOEDA que faz parte da chave e precisamos duplicar as linhas da tabela cujo campo CDMOEDA é igual a 1 alterando o valor para 20. Se temos poucos campos na tabela seria algo assim:
INSERT INTO TPT210 SELECT CAMPO1, CAMPO2, 20 AS CDMOEDA, CAMPO4 FROM
TPT210
Mas se temos muitos campos; reescreve-los todos é bastante trabalhoso e propenso a erros. Embora podemos utilizar alguns recursos de aplicativos dos bancos que copia os nomes de campos separados por virgula e tal, ainda assim, por experiência, é chato.
Portanto o script abaixo tem o objetivo de resolver esta questão.
O objetivo é o mesmo acima descrito. Copiar todos os registros da tabela com TPT210 com o valor do campo CDMOEDA = 1 e inseri-los na própria TPT210 alterando o conteúdo do campo
CDMOEDA para 20.
DECLARE @vCOLLIST VARCHAR(1000), @vSQLS VARCHAR(4000)
SET @vCOLLIST = ''
SELECT @vCOLLIST = @vCOLLIST + CASE WHEN NAME != 'CDMOEDA' THEN
NAME
ELSE
'20 AS CDMOEDA'
END + ', ' FROM SYSCOLUMNS WHERE ID = OBJECT_ID('TPT210') ORDER BY COLORDER
SELECT @vSQLS = 'INSERT INTO TPT210 SELECT ' + substring(@vCOLLIST,1,len(@vCOLLIST)-1) + ' FROM TPT210 WHERE CDMOEDA = 1'
PRINT @vSQLS
Por enquanto é somente isso.
Até a próxima.
Reginaldo
PS: Aqui na empresa funciona e quase todos os servidores menos em um e não sei porque.
Assinar:
Postar comentários (Atom)


Nenhum comentário:
Postar um comentário