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

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:
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
 
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
 
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

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
 
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).
 
Back
Topo