none
Erro em sintaxe de stored procedure RRS feed

  • Pergunta

  • Ola, mais uma vez venho pedir ajuda em um problema ao criar uma procedure. Bem, estou criando um código simples de classifica o rank dos usuários cadastrados na tabela Users, ela pega o numero de vitorias(W) e derrota(D) de cada jogador aplica essa formula W-D*2+W+D depois o valor é inserido na coluna Rank dos usuários, apos inserir o rank de todas as contas é inserido a patente de acordo com a ordem do rank(do top 1 ate o ultimo)

    CREATE PROCEDURE [dbo].[UpgradeRank] AS
    	DECLARE @Size INT,@Rank INT, @W INT, @D INT;
    	INSERT INTO Users(Rank)
    	SELECT @Size = COUNT(*), @W = Wins,@D = Defeats,@Rank = @W-@D*2+@W+@D FROM Users
    
    	INSERT INTO Users(Patent)
    	SELECT Patents.Id FROM Patents,
    	(SELECT ROW_NUMBER()/@Size as RN FROM Users ORDER BY Rank DESC) AS U
    	WHERE AmountMin > U.RN AND AmountMax <= U.RN

    A formula para achar a patent é a posição no rank/ numero total de usuários na tabela Users se o valor estiver entre:

    AmountMin > U.RN AND AmountMax <= U.RN

    O id da patente (Patents.Id) é inserido na coluna patent do usuário. Como podem ver tentei montar mas apresenta este erro:

    Severity	Code	Description	Project	File	Line	Suppression State
    Error		SQL46047: The ORDER BY clause is not valid in views, inline functions, derived tables, sub-queries, and common table expressions, unless TOP or FOR XML or OFFSET is also specified.		dbo.Procedure	8	
    

    sábado, 21 de maio de 2016 11:30

Respostas

  • Bom dia Mateus.

    Esse é o código completo ? O erro esta ocorrrendo no Insert Users ?

    Cara olhando assim o que eu consigo ver de errado é no ser Select onde faz o insert da tabela User, voce esta utilizando ROW_NUMBER sem a clausula OVER, da uma olhada nesse Select.

    Att

    Reginaldo C. Silva

    • Marcado como Resposta Thales F Quintas segunda-feira, 23 de maio de 2016 18:15
    segunda-feira, 23 de maio de 2016 11:42