Array
(
)

Cadastro com dados de outra tabela

Cristiano Ferreira
   - 07 out 2013

Olá pessoal,
Estou com o seguinte problema:
Tenho uma tabela de funcionários chamada tb_funcionarios. Para cada funcionário que atende a alguns quesitos ele ganha 1 numero da sorte ou 3 numeros da sorte. Ex.: Se ele não tem nenhuma falta ele ganha 3 numeros da sorte e se ele tem faltas justificadas e abonadas ele ganha somente 1. Caso ele tenha faltas injustificadas, suspenções e advertências ele não ganha nada.
tb_funcionarios
id_funcionario, INT iDENTITY (1,1) NOT NULL -> PK
nome_func NVARCHAR (255) NULL
nivel_penalidade INT NULL -> Aqui vai conter a penalidade do funcionário que pode ser 0 para nenhuma, 1 para falta abonada, 2 para falta justificada, 3 para falta injustificada, 4 para advertência e 5 para suspenção.
Até aí está OK. Já estou gerando na tabela tb_numeros a quantidade de registros com o id_funcinario para cada um que recebeu o número. Ou seja, se tenha 10 funcionários, 3 sem nenhuma penalidade, 4 com penalidades mínima (faltas abonadas e justificadas) e 3 com penalidades restritivas (suspenções, faltas injustificadas e advertências), terei na tb_numeros 9 registros dos funcionarios sem penalidades (cada 1 terá que receber 3 números) e 4 com penalidades mínimas (apenas 1 numero neste caso). Então terei 13 registros na minha base tb_numeros.

tb_numeros
id_numero INT IDENTITY (1,1) NOT NULL -> PK
id_funcionario INT NULL -> Aqui entra o ID do funcionário da tabela tb_funcionarios
numero INT NULL -> Aqui deve entrar os numeros da tabela tb_num
status INT NULL -> Aqui imaginei que para cada registro que houvesse recebido um número eu colocaria 1
Daí preciso que cada um destes registros receba 1 numero diferente e único (não pode haver registros repetidos).
Pensei da seguinte forma: Monto uma tabela chamada tb_num que conterá os 9999 numeros que posso sortear de maneira randômica, ou seja, um para cada registro que existir em minha tb_numeros, sem precisar gerar um número aleatôrio randômico. Outro deltalhe que cada número tem que ter 4 digitos e deve ser inteiro ou seja, tem que ser 0001 e não 1.
tb_num
id_num INT IDENTITY (1,1) NOT NULL -> PK
num INT NULL -> Número de 0000 a 9999
status INT -> Recebe um 1 quando o número do registro for gravado em tb_numeros. Forma de identificar se o número já foi usado ou não.
Não sei se consegui explicar bem pessoal, más é mais ou menos isso... Eu tenho muito pouco conhecimento em SQL e fazer isto via ASP não dá certo pois são muitos registros a serem gerados e muitas validações a serem feitas. Acaba dando timeout, mesmo controlando o Buffer e o Timeout. Assim o que me resta é gerar os registros via ASP e montar a colocação dos números nos registros de numeros via SQL (talvez procedure). No total são 5501 funcinários que dá 2007 com 3 numeros e 1870 com apenas 1 numero.
Desde já agradeço muito pela força pessoal.

Obrigado