Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 546550
            [titulo] => sql server - atualizar campos
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-02-23 09:05:48
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 378439
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marcos P
            [Apelido] => 
            [Foto] => 378439_20140801115452.png
            [Conteudo] => Felipe,

Essa é a mesma necessidade que você relatou em : [url:descricao=Sql Server - Trigger - Saber se está inserindo alterando ou deletando...]http://www.devmedia.com.br/forum/sql-server-trigger-saber-se-esta-inserindo-alterando-ou-deletando/546533[/url].

Criar vários posts não vai lhe garantir maior velocidade na resposta !

Na verdade, dar continuidade ao post original acaba sendo melhor, pois acaba agregando mais informações em um único ponto.

Para atender sua necessidade no Sql Server, crie triggeres separadas : uma para insert e outra para update.

Acaba sendo a mesma lógica do que você tinha no Firebird, só que os códigos estarão separados de acordo com o tipo de operação a ser realizado.

Conforme indicado pelo Din no post original, dê uma olhada no link : [url:descricao=Triggers no SQL Server: teoria e prática aplicada em uma situação real]http://www.devmedia.com.br/triggers-no-sql-server-teoria-e-pratica-aplicada-em-uma-situacao-real/28194[/url].

Também existe farta documentação na WEB sobre a criação de triggeres no Sql Server. ) )

sql server - atualizar campos

Felipe Barros
   - 23 fev 2016

bom dia...
estou migrando um banco de dados firebird para sql server...
preciso, no sql server atualizar alguns campos sempre que uma tabela for modificada (insert ou update)
alem de todos os outros, tenho 4 campos que sao DateInsert, UserInsert, DateUpdate, UserUpdate.
no insert, preciso preencher esses 4 campos
no update, preciso preencher somente dois desses 4 campos...
no firebird, eu faço isso numa trigger da tabela, verificando se esta (inserting ou updating)...
como posso fazer isso no sql server ?!
mas direto no banco de dados, sem ser pelo programa ?!

Post mais votado

Marcos P
   - 23 fev 2016

Felipe,

Essa é a mesma necessidade que você relatou em : Sql Server - Trigger - Saber se está inserindo alterando ou deletando....

Criar vários posts não vai lhe garantir maior velocidade na resposta !

Na verdade, dar continuidade ao post original acaba sendo melhor, pois acaba agregando mais informações em um único ponto.

Para atender sua necessidade no Sql Server, crie triggeres separadas : uma para insert e outra para update.

Acaba sendo a mesma lógica do que você tinha no Firebird, só que os códigos estarão separados de acordo com o tipo de operação a ser realizado.

Conforme indicado pelo Din no post original, dê uma olhada no link : Triggers no SQL Server: teoria e prática aplicada em uma situação real.

Também existe farta documentação na WEB sobre a criação de triggeres no Sql Server.

Jothaz
   - 23 fev 2016

Da mesma forma que no Firebird via trigger.

Felipe Barros
   - 23 fev 2016

existe sim farta documentacao na web...
porem nao encontrei nada, por isso vim ao forum...
qto ao link passado, lá tmb nao diz o que eu preciso...

qto ao topico duplicado, discordo completamente...
o primeiro foi para saber como faco para verificar se a trigger esta em modo de insert ou update...

este segundo, é como faco para alterar alguns campos de uma tabela com trigger...
veja que ja nao quero saber se esta inserting or updating...
consegue ver que são coisas diferentes ?!

Felipe Barros
   - 23 fev 2016

Jothaz...
vc tem problema ?!
pq perder seu tempo em responder uma bobagem dessa ?!

se fosse da mesma forma, nao teria perdido o meu tempo em colocar aqui no forum...

Marcos P
   - 23 fev 2016

Nossos comentários são pertinentes e embaçados pela resposta à CENTENAS ( alguns MILHARES ) de outros posts.

Ninguém aqui está tecendo críticas, apenas com o intuito de criticar. Estamos aqui, para criticar no sentido de melhorar. Se você não tem maturidade para entender isso, sinto muito !

Quanto a sua questão...

Citação:
este segundo, é como faco para alterar alguns campos de uma tabela com trigger...


Normalmente atualização de dados é executada com o comando UPDATE.

Qual sua dificuldade ?

Se é a questão de atualizar os 4 campos no insert e apenas 2 no update, como são triggeres separadas, basta construir a query de update conforme os campos que você quer atualizar.

Se a questão é a origem dos dados, além do artigo indicado, o exemplo colocado pelo William em seu outro post é mais que suficiente para elucidar a questão.

Senão for nada disso, você poderia, por favor, explicar melhor sua necessidade ?

Marcos P
   - 23 fev 2016

Outra questão, tenha respeito pela pessoas !

Antes de criticar o Jothaz, verifique ( no perfil dele ) a quantidade e ( principalmente ) a qualidade das respostas que ele costuma dar nos post...

Isaac Jose
   - 23 fev 2016


Citação:
Da mesma forma que no Firebird via trigger.


caro Felipe não gosto de entrar nesse tipo de conversa e me desculpe por isso. mais por favor se não tem conhecimento em SQL como tem no Fire não questione o Sr. Jothaz.
possivelmente ele tem mais idade de TI do que toda a sua vida. e como o outro amigo MP falou procure no histórico da pessoa. e se mesmo assim a resposta da pessoa não le agradar seja cordial ou simplesmente não perca seu tempo escrevendo isso.

tente fazer como o Jothaz falou com trigger.. pesquise por trigger com Merge. talvez ajude.. ex. http://www.sqlservercentral.com/Forums/Topic947916-392-1.aspx

Felipe Barros
   - 23 fev 2016

ok...
vamos lá...

deixando a sintaxe de lado...

no firebird e mysql eu faço assim

#Código


trigger atualiza_informacoes_datas_e_usuario
before insert or update
begin
new.data = hoje;
new.usuario = 10;
end;



como faço isso no sql server ?!
mais precisamente, o valor new... existe new e old no sql server?!
no link que foi indicado para eu ler, ele nao faz isso...
longe de fazer isso...
ou seja...
a trigger precisa alterar o valor de um campo qq, antes de executar o comando e isso é possivel no firebird, mysql e oracle...
quero saber se é possivel no sql server e como faço...

o que da para fazer é na trigger fazer um update na propria table... isso da... mas isso é certo?! ainda mais que num simples insert, eu faço um insert e um update junto... ai fica complicado...

Marcos P
   - 23 fev 2016

Montei um exemplo como se a tabela fosse uma tabela de faturas...

#Código

CREATE TRIGGER nomeTrigger ON Tabela
   FOR UPDATE
   AS        
     DECLARE @ValorNew  float

     DECLARE @NroFatura int
     SELECT @NroFatura  = NroFatura from inserted        

     IF UPDATE(Valor)              
     BEGIN
         SELECT @ValorNew = Valor FROM inserted
         UPDATE Tabela SET Valor = @ValorNew WHERE NroFatura = @NroFatura
     END

Adapte a partir dessa ideia...

Jothaz
   - 23 fev 2016


Citação:
Jothaz...
vc tem problema ?!
pq perder seu tempo em responder uma bobagem dessa ?!

se fosse da mesma forma, nao teria perdido o meu tempo em colocar aqui no forum...


Meu problema é ser generoso e tentar ajudar as pessoas. A resposta foi coerente com a pergunta. E como postei quase junto com o Marcos não vi a reposta dele, caso contrário nem teria postado.

Continuo com a resposta que postei, você deve utilizar trigger e como o Marcos P deixou claro existe muito material. Agora se você não consegue entender o que esta descrito no material, poste suas dúvidas.

Se a resposta não lhe agradou ou resolveu seus problemas, não precisa partir para falta de educação, basta ignorá-la. Respeito e civilidade são fundamentais em uma comunidade.

E pode ficar tranquilo que não "sujo" mais seus posts.

Agradeço ao Marcos P e Isaac Jose, por demonstrarem como devemos nos portar em um fórum.

Felipe Barros
   - 23 fev 2016


Citação:

Citação:
Da mesma forma que no Firebird via trigger.


caro Felipe não gosto de entrar nesse tipo de conversa e me desculpe por isso. mais por favor se não tem conhecimento em SQL como tem no Fire não questione o Sr. Jothaz.
possivelmente ele tem mais idade de TI do que toda a sua vida. e como o outro amigo MP falou procure no histórico da pessoa. e se mesmo assim a resposta da pessoa não le agradar seja cordial ou simplesmente não perca seu tempo escrevendo isso.

tente fazer como o Jothaz falou com trigger.. pesquise por trigger com Merge. talvez ajude.. ex. http://www.sqlservercentral.com/Forums/Topic947916-392-1.aspx


Isaac Jose...
da um tempo, vai...
vc la sabe a minha idade?!
se o cara tem mais idade que eu tenho de vida ele deve ser um dinossauro...

vou concordar com um outra cara aqui do forum que nao lembro o nome agora...
mas esse forum é muito medíocre...

vcs se acham bons em tudo...
acham que as respostas sao as melhores e que se a pessoa que ta perguntando nao sabe nada e que nao estuda e que nao procura, etc...

o cara respondeu de maneira completamente estúpida e vcs ja começam a levar tudo pro lado pessoal...
vao todos tomar no cú!

eu nao sei sql server mesmo...
nao sei e nao tenho intenção nenhuma em saber...
so preciso fazer uma merdinha de trigger e mais nada...
e é bem complicado de fazer essa merdinha de trigger...

as poucas vezes que precisei usar, achei uma merda...

mas nao to aqui para discutir com 2 ou 3 otários que se acham, se o sql server é bom, ruim, péssimo, ou qq outra coisa...
nao to querendo comparar banco de dados...
qdo for comparar, eu abro um topico para isso...

Marcos P
   - 23 fev 2016

Cara você exagerou... não faz sentido nenhum uma reação dessas !

Fico triste de ver isso e mais ainda por ter, de verdade, tentado te ajudar a resolver seu problema.

Espero que você tenha sucesso nas tuas coisas e pode ficar tranquilo, a minha ajuda ( que nem sei se lhe serviu pra algo ), você não terá mais.

P.S.: não coloque por aqui os termos que você costuma empregar no seu dia-a-dia, principalmente com sua família. Não temos nada a ver se você não teve a correta educação durante sua vida.

Felipe Barros
   - 23 fev 2016

Marcos P,
obrigado e mais uma vez, vai tomar no seu cu...