[RESOLVIDO] Procedure no SQL Server para alterar coluna de todas as linhas, exceto a última

Olá a todos.

Tenho que fazer a seguinte procedure

b. Criar uma procedure que deve popular a tabela TabelasBanco da seguinte maneira:

i. A tabela deve ser populada com as informações vindas da consulta
SELECT id, name FROM sys.sysobjects WHERE xtype = 'U’
ii. A coluna DataCarga deve ser preenchida com a data do dia da carga.
iii. A coluna FlagCarga deve ser preenchida com o valor ‘UC’ equivalente a Última Carga;
iv. Antes de inserir os dados na tabela, a procedure deve verificar se já existem dados na tabela TabelasBanco, caso existam, deve ser dado o comando UPDATE para alterar o campo FlagCarga para o valor ‘CA’ Carga Antiga. De modo que apenas a última carga efetuada possua o flag ‘UC’ e as demais possuam o valor ‘CA’.

Estou tendo problema para fazer o item iv. Da forma que eu fiz todas as colunas da tabela estão sendo alteradas para ‘CA’. Mas a forma correta é que a última linha, a coluna FlagCarga, deva ficar com o valor ‘UC’

O procedimento que eu fiz é o que está abaixo: alguém sabe como posso resolver isso?

CREATE PROCEDURE sp_popula_tabela
AS
IF EXISTS (SELECT * FROM TabelasBanco)
    UPDATE TabelasBanco SET FlagCarga = 'CA'
	
	INSERT INTO TabelasBanco (IDTabela, NomeTabela)
	SELECT id, name FROM sys.sysobjects WHERE xtype = 'U'
	INSERT INTO TabelasBanco (DataCarga, FlagCarga) VALUES (getDate(), 'UC')

deixa eu ver se entendi, você quer algo assim:

[code]CREATE PROCEDURE sp_popula_tabela
AS
IF EXISTS (SELECT * FROM TabelasBanco)
UPDATE TabelasBanco SET FlagCarga = ‘CA’

INSERT INTO TabelasBanco (IDTabela, NomeTabela, DataCarga, FlagCarga)  
SELECT id, name, getDate(), 'UC' FROM sys.sysobjects WHERE xtype = 'U'[/code]

[quote=evefuji]deixa eu ver se entendi, você quer algo assim:

[code]CREATE PROCEDURE sp_popula_tabela
AS
IF EXISTS (SELECT * FROM TabelasBanco)
UPDATE TabelasBanco SET FlagCarga = ‘CA’

INSERT INTO TabelasBanco (IDTabela, NomeTabela, DataCarga, FlagCarga)  
SELECT id, name, getDate(), 'UC' FROM sys.sysobjects WHERE xtype = 'U'[/code][/quote]

Opa evefuji, o comando é esse mesmo,

agora de acrdo com este trewcho deve ser dado o comando UPDATE para alterar o campo FlagCarga para o valor ‘CA’ Carga Antiga. De modo que apenas a última carga efetuada possua o flag ‘UC’ e as demais possuam o valor ‘CA’.

pelo que eu entendi, a última linha, a coluna FlagCarga deve ficar com o valor ‘UC’, e nas outras linhas, essa coluna deve ficar com o valor ‘CA’

Isso é possível?

Opa,

O que eu entendi foi o seguinte, a cada chamada dessa procedure, iria setar toda as linhas daquela tabela como “CA”, e adicionaria as linhas da carga atual como UC…

1ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	UC
2			Tabela2		20-12-2011	UC
3			Tabela3		20-12-2011	UC

2ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	CA
2			Tabela2		20-12-2011	CA
3			Tabela3		20-12-2011	CA
1			Tabela1		21-12-2011	UC
2			Tabela2		21-12-2011	UC
3			Tabela3		21-12-2011	UC

3ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	CA
2			Tabela2		20-12-2011	CA
3			Tabela3		20-12-2011	CA
1			Tabela1		21-12-2011	CA
2			Tabela2		21-12-2011	CA
3			Tabela3		21-12-2011	CA
1			Tabela1		22-12-2011	UC
2			Tabela2		22-12-2011	UC
3			Tabela3		22-12-2011	UC
4			Tabela4		22-12-2011	UC

Acho que para isso este comando que o evefuji passou estaria correto, não?

Valeu

[quote=haroflow]Opa,

O que eu entendi foi o seguinte, a cada chamada dessa procedure, iria setar toda as linhas daquela tabela como “CA”, e adicionaria as linhas da carga atual como UC…

1ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	UC
2			Tabela2		20-12-2011	UC
3			Tabela3		20-12-2011	UC

2ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	CA
2			Tabela2		20-12-2011	CA
3			Tabela3		20-12-2011	CA
1			Tabela1		21-12-2011	UC
2			Tabela2		21-12-2011	UC
3			Tabela3		21-12-2011	UC

3ª Carga

IDTabela	NomeTabela	DataCarga	FlagCarga
1			Tabela1		20-12-2011	CA
2			Tabela2		20-12-2011	CA
3			Tabela3		20-12-2011	CA
1			Tabela1		21-12-2011	CA
2			Tabela2		21-12-2011	CA
3			Tabela3		21-12-2011	CA
1			Tabela1		22-12-2011	UC
2			Tabela2		22-12-2011	UC
3			Tabela3		22-12-2011	UC
4			Tabela4		22-12-2011	UC

Acho que para isso este comando que o evefuji passou estaria correto, não?

Valeu[/quote]

Opa haroflow, é isso mesmo então. Foi questão de interpretação mesmo. Mas nesse caso só funciona se eu criar a tabela sem definir chave primária.

Obrigado haroflow e evefuji.

a meu ver, a chave primária deveria ser IDTabela, NomeTabela, DataCarga.