Comando SQL (update com select)

Pessoal, esta pergunta não tem nada a ver com o SC, se alguém pudesse me ajudar, muito obrigado

Preciso faze um Update no banco SQL Server 2008, mas da um erro.

Query: Obs. no lugar do (=), já tentei com IN, EXISTS, e da o mesmo erro

UPDATE produto set Ativo_sn = ‘1’
where id_produto = (select id_produto from produto where Estoque_atual <= 0 and (Id_grupo <> ‘01’ and id_grupo <> ‘02’) and (Ultima_compra <= ‘20130630’ or ultima_compra is null))

Erro:
Mensagem 512, Nível 16, Estado 1, Linha 2
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
A instrução foi finalizada.

Agradeço alguma juda

faz um select primeiro para ver se retorna as linhas que vc quer…

SELECT produto set Ativo_sn = ‘??’
where id_produto = (select id_produto from produto where Estoque_atual <= 0 and (Id_grupo <> ‘01’ and id_grupo <> ‘02’) and (Ultima_compra <= ‘20130630’ or ultima_compra is null))

O Select retorna certinho:

select * from produto where Estoque_atual <= 0 and (Id_grupo <> ‘01’ and id_grupo <> ‘02’) and (Ultima_compra <= ‘20130630’
or ultima_compra is null)

Agora preciso alterar o campo ativo_sn para ‘1’ para este select

Grato

OK…

Mas para fazer um Update vc precisa informar em que tabela fará…

neste caso vc esta informando onde vc esta buscando a informação apenas…e de posse dessa informação deve apontar onde atualizar…

Dellapiazza,

O problema é que você está tentando dar um UPDATE em um registro, mas o sub-select está retornando mais de um registro. Dessa forma você não vai conseguir fazer o update funcionar. Verifique no teu sub-select de forma que te retorne somente o registro que você precisa, para poder usar no update.

Jean, vou atualizar a tabela PRODUTO, campo ATIVO_SN para = ‘1’

Kleyber, realmente serão atualizados vários registros, e dessa forma não é permito.

Estou pesquisando e tem comandos juntando UPDATE, CASE, WHEN, …

André,
Como você está atualizando múltiplos registros você não pode usar o = no WHERE. O certo seria usar o IN.
Tem certeza que a mensagem de erro é a mesma?
[]s

UPDATE tabela_produto
SET Ativo_sn = ‘1’
where id_produto = (select id_produto from produto where Estoque_atual <= 0 and (Id_grupo <> ‘01’ and id_grupo <> ‘02’) and (Ultima_compra <= ‘20130630’ or ultima_compra is null))

Jean, também dá erro:

Mensagem 512, Nível 16, Estado 1, Linha 1
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
A instrução foi finalizada.

Também tentei: where id_produto IN (…

André,
Existe alguma trigger associada a tabela de Produtos?
Se sim, pode ser este o problema. Dependendo da forma como a trigger foi implementada ela impede a execução de INSERTS e UPDATES de vários registros ao mesmo tempo.
Desative a trigger e tente:
UPDATE produto set Ativo_sn = ‘1’
where id_produto IN (select id_produto from produto where Estoque_atual <= 0 and (Id_grupo <> ‘01’ and id_grupo <> ‘02’) and (Ultima_compra <= ‘20130630’ or ultima_compra is null))

Allan, não exite nada associada, também tentei como disso, e nada.

Minha solução:
Como o Select filtrou legal, criei uma tabela temporaria e fiz uma rotina no sistema para fazer o update.

Neste caso não uso o SC, é outra ferramenta.

Quando achar uma solução para o Update vou postar aqui

Grato a todos pela ajuda