Inquiridor
Update com a cláusula TOP

Pergunta
-
Galera!!
Estou efetuando um UPDATE porem gostaria de saber se é possível efetuar um UPDATE TOP(5) no SQL 2000. Abaixo, envio a consulta que estou tentando efetuar.Alguem sabe com posso resolver este caso?
UPDATE TOP (5) PGO_GVT_DESP_DESPACHADOS1
SET PGO_GVT_DESP_DESPACHADOS1.TECNICO = PGO_GVT_DESP_DESPACHADOS_RETORNO3.MATRICULA,
PGO_GVT_DESP_DESPACHADOS1.STATUS='DESPACHADO'
FROM PGO_GVT_DESP_DESPACHADOS1,PGO_GVT_DESP_DESPACHADOS_RETORNO3
WHERE PGO_GVT_DESP_DESPACHADOS1.ESTACAO = PGO_GVT_DESP_DESPACHADOS_RETORNO3.ARD
AND PGO_GVT_DESP_DESPACHADOS1.STATUS IS NULL
AND PGO_GVT_DESP_DESPACHADOS1.TECNICO IS NULL
Todas as Respostas
-
Bom Dia Transfer,
Infelizmente o SQL Server 2000 não aceita a utilização de TOP em instruções de UPDATE (apenas o 2005 introduziu essa possibilidade). O SQL Server 2000 também não aceita a construção TOP (N) apenas TOP N e o N tem que ser um valor informado (impossibilitando uma variável).
Você terá que fazer um cursor para ler e disparar os updates individualmente ou utilizar CURRENT_OF na cláusula WHERE para que o cursor atualize diretamente o registro.
[ ]s,
Gustavo
-
-
-
-
Olá,
Sim, a partir do SQL Server 2005 já é possível executar um INSERT, UPDATE ou DELETE, usando a cláusula TOP.
Para as versões 6.5, 7 e 2000, você pode usar a solução abaixo, através da opção ROWCOUNT.
O único problema é que você não pode usar ORDER BY em um UPDATE (ou INSERT, ou DELETE), logo o ROWCOUNT vai respeitar a ordenação física das tabelas utilizadas no join.
Code Snippet
/* Monta o cenário
*/
CREATE TABLE Tabela1 (ID INT, VALOR INT)
INSERT INTO Tabela1 VALUES (1, 10)
INSERT INTO Tabela1 VALUES (2, 20)
INSERT INTO Tabela1 VALUES (3, 30)
INSERT INTO Tabela1 VALUES (4, 40)
INSERT INTO Tabela1 VALUES (5, 50)CREATE TABLE Tabela2 (ID INT)
INSERT INTO Tabela2 VALUES (1)
INSERT INTO Tabela2 VALUES (2)
INSERT INTO Tabela2 VALUES (3)
INSERT INTO Tabela2 VALUES (4)
INSERT INTO Tabela2 VALUES (5)/* Seta o ROWCOUNT para a quantidade de registros desejada.
* Qualquer statement executado daqui para baixo, usará esta
* quantidade como padrão.
*/
SET ROWCOUNT 3/* Update
*/
UPDATE Tabela1
SET ID = 10
FROM Tabela1 T1
INNER JOIN Tabela2 T2
ON T1.ID = T2.ID/* Retorna o ROWCOUNT ao estado normal
**/
SET ROWCOUNT 0/* Resultado
*/
SELECT * FROM Tabela1
Qualquer dúvida, é só falar.
Um abraço,
Raul Santos