1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida em MS SQL 2005: é simples acho eu [afinal sao muitas]

Discussão em 'Programação' iniciada por nelsondac, 7 de Fevereiro de 2009. (Respostas: 6; Visualizações: 545)

  1. nelsondac

    nelsondac Power Member

    boas. o que quero fazer é +/- o seguinte:

    quero preencher aleatoriamente uma tabela mas esta tem relação com outras. entao, para evitar fazer relações que nao existem, quero pegar no ultimo valor da ID e associar a uma variavel. a qual seria o valor maximo...

    então , tenho isto

    Código:
    declare @last int
    select Distinct  max(idCategoria) from Categorias [U]as @last[/U]
    print 'last = ' + cast(@last as varchar(3))
    go
    
    a tal variavel seria last... depois faco o print para ver se associou como eu queria..

    que me falta aqui ?

    a parte sublinhada não me inspira confiança. fkb
     
    Última edição: 8 de Fevereiro de 2009
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, com esse AS, apenas estás a dar um alias à tabela. Precisas de algo do género:

    Código:
    declare @last int
    select @last = max(idCategoria) from Categorias
    go
     
  3. Jammin @

    Jammin @ Power Member

    correcto penso eu, para ires buscar o ultimo comando tens de usar o "max"
     
  4. nelsondac

    nelsondac Power Member

    voces são impecaveis!!!

    funcionou sim. mt obrigado.

    fkb
     
  5. nelsondac

    nelsondac Power Member

    já agora, outra duvida, quero gerar um valor aleatorio em que seja diferente de todos os outros que estão numa tabela.

    tenho algo assim:

    Código:
    declare @numProd int
    
    set @numProd = RAND() * 6 +1
    while @numProd NOT EXISTS (
    select idProduto from VendaLinha
        where idVenda = 1
    ) begin
    set @numProd = RAND() * 6 +1
    end
    
    print @numProd
    
    
    isto basicamente é para preencher aleatoriamente as linhas de uma factura mas evitar que crie duas entradas para o mesmo produto... estou a fazer isto para ver se o @numProd fica diferente mas da erro

    Msg 156, Level 15, State 1, Line 9
    Incorrect syntax near the keyword 'EXISTS'.

    :s

    como resolvo isto? fkb
     
  6. pmasl

    pmasl Power Member

    O ultimo valor da ID não é necessariamente o max. Se é um inteiro sequencial (presumo que a chave), é mais eficiente fazer um order by que um agrupamento pelo max. Experimenta, das duas uma:

    SET @last = (SELECT TOP 1 idCategoria FROM Categorias ORDER BY idCategoria DESC)

    ou

    SELECT @last = MAX(idCategoria) FROM Categorias
     
  7. AliFromCairo

    AliFromCairo Power Member

    Boas, a cláusula NOT EXISTS não pode ser antecedida por uma variável da maneira como estás a fazer. A maneira correcta é utilizares algo do género: IF NOT EXISTS(SELECT variável FROM tabela).
     

Partilhar esta Página