Pegar nome da StoredProcedure e outras coisas sobre storedprocedure

10/03/2009

Bom dia como faço para capturar o nome da storedprocedure para gravar no Banco de dados, ou seja, quando a stored procedure for executada quero pegar o nome dela e gravar esse nome junto com a dada e o usuário que a executou em uma tabela, então como faço resgatar o nome da sp.         Como faço para verificar se o usuário preencheu todo o formulário, ou seja, faço um required nos campos obrigatórios, mas nem todos são obrigatórios, mas preciso saber como faço para que mostrar para o usuário quanto ainda falta preencher, ou seja, 10%, 20%, mas, tem dois tipos de usuários, um é pessoa física que preenche apenas os campos pessoas física, ou seja, Nome, endereço, cidade, estado, pais, etc, e outro é pessoa juridica que preenche CNPJ, e todos os dados acima, mas também preenche nome da empresa, telefone, cargo do funcionário.   Como faço esta sp?     Como faço contas de somar, dividir, multiplicar e porcentagem na sp, ou seja, quero somar 2 ou 3 campos que são parametros da sp, depois dividir por 2 e finalmente retornar a porcentagem desse campo por um parametro que vem da consulta de uma tabela.     Como faço para bloquer um cadastro se o campo for diferente daquilo que é obrigatório, ou seja, se eu preciso receber Read = T e o usuário enviar Read = F, entao não registrar o usuário e retornar erro.     Existe algum meio de enviar um e-mail por meio de stored procedure? Isso compromete o Banco de Dados e a performance?   Att   Regis     att Regis
Régis Mello

Régis Mello

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

10/03/2009

E ai Regis, blz?   Seguem as respostas para suas dúvidas abaixo:     Bom dia como faço para capturar o nome da storedprocedure para gravar no Banco de dados, ou seja, quando a stored procedure for executada quero pegar o nome dela e gravar esse nome junto com a dada e o usuário que a executou em uma tabela, então como faço resgatar o nome da sp.   Sugiro vc fazer um script dentro da propria SP, desta forma vc garante integridade de todos os dados, sem ter problemas. Como por exemplo, ao chamar um SP, dentro dela vc coloca o script que insere na tabela que deseja, veja o exemplo abaixo:   CREATE PROCEDURE SP_TESTE
(
    @PARAM_1 INT,     @PARAM_2 INT,     @PARAM_3 INT,
    @COD_USUARIO VARCHAR(10)
)
AS
(
  )
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

E ai Regis, blz?   Seguem as respostas para suas dúvidas abaixo:     Bom dia como faço para capturar o nome da storedprocedure para gravar no Banco de dados, ou seja, quando a stored procedure for executada quero pegar o nome dela e gravar esse nome junto com a dada e o usuário que a executou em uma tabela, então como faço resgatar o nome da sp.   Sugiro vc fazer um script dentro da propria SP, desta forma vc garante integridade de todos os dados, sem ter problemas. Como por exemplo, ao chamar um SP, dentro dela vc coloca o script que insere na tabela que deseja, veja o exemplo abaixo:   CREATE PROCEDURE SP_TESTE
(
    @PARAM_1 INT,     @PARAM_2 INT,     @PARAM_3 INT,
    @COD_USUARIO VARCHAR(10)
)
AS
(
  )
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

ok, mas qual o comando para que eu pegue o nome da storedprocedure para armazenar na tabela? 
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

E ai Regis, blz?   Seguem as respostas para suas dúvidas abaixo:     Bom dia como faço para capturar o nome da storedprocedure para gravar no Banco de dados, ou seja, quando a stored procedure for executada quero pegar o nome dela e gravar esse nome junto com a dada e o usuário que a executou em uma tabela, então como faço resgatar o nome da sp.   Sugiro vc fazer um script dentro da propria SP, desta forma vc garante integridade de todos os dados, sem ter problemas. Como por exemplo, ao chamar um SP, dentro dela vc coloca o script que insere na tabela que deseja, veja o exemplo abaixo:   CREATE PROCEDURE SP_TESTE
(
    @PARAM_1 INT,     @PARAM_2 INT,     @PARAM_3 INT,
    @COD_USUARIO VARCHAR(10)
)
AS
(
     -- AQUI VAI OS PROCEDIMENTOS QUE SUA SP FAZ         -- AGORA VC GRAVA NA TABELA QUE DESEJA OS DADOS     INSERT INTO TABELA(NOM_SP, COD_USU, DAT_ATUAL) VALUES ('SP_TESTE', @COD_USUARIO, GETDATE());   )     Como faço para verificar se o usuário preencheu todo o formulário, ou seja, faço um required nos campos obrigatórios, mas nem todos são obrigatórios, mas preciso saber como faço para que mostrar para o usuário quanto ainda falta preencher, ou seja, 10%, 20%, mas, tem dois tipos de usuários, um é pessoa física que preenche apenas os campos pessoas física, ou seja, Nome, endereço, cidade, estado, pais, etc, e outro é pessoa juridica que preenche CNPJ, e todos os dados acima, mas também preenche nome da empresa, telefone, cargo do funcionário.     Para mostrar para o usuário quanto falta para preencher na pagina, basta usar os requiredFieldValidator (RFV) e um ValidationSummary no topo da página, é so arrastar que ele exibe as mensagens de cada validador que não foi satisfeito sua condição.   Para diferenciar PF de PJ, vc pode setar as propriedades dos RFV quanto ao atributo "ENABLE", assim, quando carregar a pagina vc verifica se é PF ou PJ e habilita ou desabilita as validações de acordo com cada um.   Isto deve ser feito no formulario na página, não em Stored Procedures.     Como faço contas de somar, dividir, multiplicar e porcentagem na sp, ou seja, quero somar 2 ou 3 campos que são parametros da sp, depois dividir por 2 e finalmente retornar a porcentagem desse campo por um parametro que vem da consulta de uma tabela.     CREATE PROCEDURE SP_TESTE
(
    @PARAM_1 INT,     @PARAM_2 INT,     @RESULTADO FLOAT()
)
AS
(
     @RESULTADO =   (@PARAM_1 + @PARAM_2)/2       @RESULTADO = @RESULTADO/100 --PORCENTAGEM    )   Segue abaixo algumas funções SQL, se tiver tempo dê uma lida, são importantes:   Funções de agrupamento:   AVG() = Retorna o valor médio de uma coluna específica
BINARY_CHECKSUM() = O valor do BINARY_CHECKSUM computado sobre uma linha ou uma tabela ou sobre uma lista de expressões. BINARY CHECKSUM é usada para detectar alterações em uma linha ou uma tabela. CHECKSUM() = O valor de CHECKSUM computado sobre uma linha ou uma tabela, ou sobre uma lista de expressões. CHECKSUM é usada para construir índices de hash.
CHECKSUM_AGG() = O valor de CHECKSUM de um grupo. Valores nulos são ignorados.
COUNT() = Retorna o número de linhas
COUNT_BIG() = igual ao COUNT mas o COUNT_BIG sempre retorna um tipo de dados bigint.
MAX() = Retorna o valor máximo de uma coluna específica
MIN() = Retorna o valor mínimo de uma coluna específica
SUM() = Retorna a soma de uma coluna específica
STDEV() = Desvio padrão de todos os valores
STDEVP() = Desvio padrão da população
VAR() = Variância estatistica de todos os valores
VARP() = Variância estatística de todos os valores da população   Funções de manipulação de strings:   ASCII(string) = pega o valor em ASCII da string
CHAR(integer) = troca inteiro do ASCII em um caráter
LEN(string) = Identifica o comprimento de uma expressão em caracteres
LOWER(string) = converte uma string uppercase para lowercase.
LTRIM(string) = remove os espaços em branco
PATINDEX(posicao, expressao) = devolve a posicão de uma string dentro de um texto. Se não encontrar, retorna zero.
REPLICATE(string, integer) = Repete N vezes um caractere especificado
REVERSE(string) = retorna o inverso de uma expressao
RTRIM (string) = remove os espaços em branco à direita de uma string
SPACE(integer) = que retorna o número de espaços em branco informados no parâmetro
STUFF(string texto, X, Y, string texto_a_inserir) = apaga da string "texto" os y caracteres a partir da posição x e os substitui por "texto_a_inserir"
SUBSTRING(string texto, posicao_inicial, tamanho) = retorna uma string com o comprimento definido em "tamanho" extraida da string "texto", a partir da "posicao_inicial"
UPPER(string) = retorna string em maiusculas   Funções de manipulação de data/hora:   nomes das partes de data: Year = yy, yyyy
Quarter = qualquer, que
Month = mm, m
Dayofyear = dy, y
Day = dd, d
Week = wk, ww
Hour = hh
Minute = mi, n
Second = ss, s
Millisecond = ms DATEADD (parte, numero, data) = adiciona um valor a parte de uma data
DATEDIFF (parte, data inicial, data final) = subtrai a data inicial da data final, indicando o resultado na unidade definida em "parte"
GETDATE() = retorna a data atual do sistema
DATENAME (parte, data) = retorna o nome da parte de uma data
DATEPART(parte, data) = retorna a parte de uma data   Funções de Sistema:   CAST(expressao as datatype) = converte uma expressao no datatype informado
COL_LENGTH(nome_da_tabela, nome_da_coluna) = retorna o tamanho da coluna
COL_NAME(id_da_tabela, id_da_coluna) = retorna o nome da coluna
DATALENGTH(expressao) = retorna o numero de bytes usados para armazenar a expressao
DB_ID(nome_do_banco) = retorna o ID do banco informado
DB_NAME(id_do_banco) = retorna o nome do banco
HOST_ID() = retorna a ID da estação que está acessando o SQL Server
HOST_NAME() = retorna o nome da estação que está acessando o SQL Server
IDENT_INCR(nome_da_tabela_ou_view) = retorna o valor incrementado
IDENT_SEED(tabela_ou_view) = retorna o valor inicial da coluna
INDEX_COL(nome_da_tabela, indice_id, chave_id) = retorna o nome da coluna que participa do índice
ISNULL(expressao, valor) = se a expressao for null, troca pelo valor especificado
ISNUMERIC(expressao) = retorna 1 se a expressao for numerica e 0 se não for
NEWID() = retorna um novo valor do tipo uniqueidentifier
NULLIF(expressao_1, expressao_2) = retorna nulo se as duas expressoes forem equivalentes. Se não forem, retorna a primeira expressao.
OBJECT_ID(nome_do_objeto) = retorna o ID de um objeto, a partir do nome fornecido
OBJECT_NAME(ID_do_objeto) = retorna o nome do objeto, a partir do ID fornecido
PARSENAME(objeto, parte) = retorna a parte do nome de um objeto, desde que tenha sido qualificado
STATS_DATE(tabela_id, indice_id) = retorna a data em que as estatísticas do índice foram atualizadas
SUSER_SID(nome_do_usuario) = retorna o ID do usuario informado
SUSER_NAME(usuario_id) = retorna o id do usuário no servidor. O argumento é opcional.
SUSER_SNAME(id_do_usuario) = retorna o nome do usuario informado. Se nenhum ID de usuario for passado para a função, retorna o nome do usuario logado
USER_ID(nome_do_usuario) = retorna o ID do usuario informado para o BD em uso
USER_NAME(id_do_usuario) = retorna o usuario conectado ao BD   Funções Matematicas:   ABS(numero) = retorna o valor absoluto do numero
ACOS(float) = retorna o arco-coseno do numero informado
ASIN(float) = retorna o arco-seno do numero informado
ATAN(float) = retorna o arco-tangente do numero informado
ATN2(Float expressao_1, float expressao_2) = Arco-tangente do valor definido pela divisão da primeira expressão pela segunda
CEILING(numero) = retorna o menor inteiro que seja maior ou igual ao numero informado
COS(float) = retorna o coseno do numero informado
COT(float) = retorna o cotangente do numero informado
DEGREES(numero) = converte radianos para graus
EXP(float) = retorna o exponencial de um numero especificado
FLOOR(numero) = retorna o maior inteiro que seja menor ou igual ao numero informado
LOG(float) = retorna o logaritmo natural do numero informado
LOG10(float) = retorna o logaritmo base 10 do numero informado
PI() = retorna o valor de PI 3.1415926535897931.
POWER(numero, potencia) = retorna o valor elevado à potencia informada
RADIANS(numero) = converte graus para radianos
RAND(expressao) = um número aleatório entre 0 e 1. Expressão é opcional e será usada como semente da cadeia pseudo-aleatória
ROUND(numero, precisao, arredonda_ou_trancar) = arredonda ou tranca o numero fornecido de acordo com a precisao informada. Se o terceiro parametro não for passado para a funçao, o numero é arredondado. Se quiser que o numero seja truncado, deve-se fornecer o valor 1
SIGN(numero) = retorna sinal positivo, negativo ou zero do numero
SIN(float) = retorna o seno do angulo especificado
SQRT(float) = retorna a raiz quadrada de um numero
TAN(float) = retorna a tangente de um numero informado
SQUARE(float) = retorna o quadrado de um numero   Função de conversão:   CONVERT(tipo(tamanho), expressão, estilo) = converte a expressão para o tipo de dado. O tamanho e o estilo são opcionais
  Como faço para bloquer um cadastro se o campo for diferente daquilo que é obrigatório, ou seja, se eu preciso receber Read = T e o usuário enviar Read = F, entao não registrar o usuário e retornar erro.     Vc tem duas opções de fazer isto, no próprio formulario ou na sua tabela, seguem as duas:     No formulario de deve usar o CompareValidator.   Na Tabela vc deve fazer uma CONSTRAINT, que aceita inserção apenas dos valores que deseja.       Existe algum meio de enviar um e-mail por meio de stored procedure? Isso compromete o Banco de Dados e a performance?     Não. Para enviar email é necessário um serviço de SMTP, um SGBD não dispõe de tal recurso. Vc deve usar o ASPMAIL.     Regis, abaixo esta uma Video aulas que sugiro vc assistir, irá ajudar bastante no conhecimento de envio de email no ASP.net. Caso não tenho acesso à alguma, me informe que providencio pra vc gratuitamente.     https://www.devmedia.com.br/articles/viewcomp.asp?comp=9287       Abraços Att Luiz Maia                  
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

Acho que não consigui transmitir minha dúvida corretamente, por isso vou fazer assim, vou postando aqui as dúvidas que tenham com storedprocedure para ir arrumando e aprendendo. ok?   1-) E mais importante, me mandaram diversas formulas, mas nenhum faz aquilo que preciso, por isso vou postar aqui o que eu preciso e o que eu já fiz, pois assim vai ficar mais claro.     O método do WS é esse: [WebMethod] public DataTable SelectUser(string Identifier, string UserLicense) { DBAccess executaProcedure = new DBAccess(); executaProcedure.SetCommandType(CommandType.StoredProcedure); executaProcedure.CommandText = "SP_SELECT_USER"; Essa é a sp #region Insere Parametros para a Procedure executaProcedure.AddParameter("@Identifier", Identifier); executaProcedure.AddParameter("@UserLicense", UserLicense); #endregion return executaProcedure.ExecuteDataSet().Tables[0];´ Aqui retorna os dados da consulta   Só que de apenas uma tabela, preciso selecionar dados em duas tabelas para retornar todos os dados para o WS, vou colocar o que eu já consigui fazer.       set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go   ALTER PROCEDURE [dbo].[SP_SELECT_USER] ( @Identifier nvarchar(50), @UserLicense varchar(25) ) AS BEGIN IF NOT EXISTS(SELECT 1 FROM cc_UserIdentifier WHERE IDENTIFIER = @Identifier) BEGIN SELECT 2 AS TIPO, 'REGISTRO NÃO ENCONTRADO NA TABELA DE PARCEIROS COMERCIAIS.' AS MENSAGEM END  Aqui tem um select para 1 tabela, porém preciso de dados que estão na tabela RelationShip, são eles IdPlan , ToMoney , em comum para pesquisa essa tabela tem o UserNum e o Identifier. SELECT UserNum, UserLicense, UserIdD, UserName, Email, EmailAdditional, DocFormat, DocNumber, Language, AddressMail, Country, City, State, ZipCode, Sex, Birth, AuthEmail, ReadTerm, NameFantasy, FunctionCompany, WebSite, AccountBankName, AccountBankOffice, AccountBankNum, AccountBankType FROM CC_USER WHERE (Identifier = @Identifier) AND (UserLicense = @UserLicense) END Isso é a primeira coisa que preciso fazer, depois preciso pesquisar na tabela PlanMark e trazer todos os dados referente ao IdPlan vindo da tabela RelationShip, e agora sim , preciso somar campos de acordo com os parametros.     Vou colocar aqui:     PRECISO CONTAR QUANTOS REGISTROS EXISTEM NA TABELA cc_Relationship para o UserNum e o Identifier solicitado e ai sim fazer o Select abaixo:   SELECT Reference, UsePercent, NamePlan, FactorDValue,  if(numero contado acima for maior e igual a número aqui) and DoubleFactorValue = T entao preciso somar  os campos ValueD, ValueI e retornar para o WS   DoubleFactorValue,  if esse campo for = T   ValueD   ValueI, DoublePoints, if esse campo for = T entao preciso somar os campos ValuePointBonusD + ValuePointBonusI e retornar para o WS ValuePointBonusD, ValuePointBonusI, PercentDouble, se esse campo for = T devo retornar a soma de ValuePercentD + ValuePercentI ValuePercentD, ValuePercentI, FROM Planmarkt WHERE (Identifier = @Identifier) AND (IdPlan = @IDPLAN)   Espero que isso esclarece o que eu preciso fazer, para que possam me auxiliar. Att Regis
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

E ai Regis, blz?   Pelo que entendi, vc precisa fazer uma join entre duas tabelas que se relacionam para trazer os dados das duas, correto?   Bom se for isto, faça o seguinte:   SELECT a.UserNum, a.UserLicense, a.UserIdD, a.UserName, a.Email, a.EmailAdditional, a.DocFormat, a.DocNumber, a.Language, a.AddressMail, a.Country, a.City, a.State, a.ZipCode, a.Sex, a.Birth, a.AuthEmail, a.ReadTerm, a.NameFantasy, a.FunctionCompany, a.WebSite, a.AccountBankName, a.AccountBankOffice, a.AccountBankNum, a.AccountBankType, b.IdPan, b.ToMoney FROM CC_USER a inner join RelationShip b on b.UserNum = a.UserNum WHERE (a.Identifier = @Identifier) AND (a.UserLicense = @UserLicense)   Para pegar os dados da tabela PlanMark, basta fazer outra JOIN com a tabela RelatioShip, ja que tem o IdPlan que faz a referencia entre ambas.   Para contar a quantidade de registros de acordo com algum criterio, vc deve usar o COUNT do sql transact.   Pelo que estou percebendo sua duvida é referente a como fazer uma consulta consolidade que ja retorna os dados tratados para vc  dentro da SP.   Se caso vc não conseguir montar a query acima, me envie seu DER falando quais os dados devem ser retornados que monto a consulta pra vc. Pode dar um print screen no DER e colar aqui, caso não consiga ainda.   Estou aguardando seu resposta.   Abraços Regis Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

E ai Regis, blz? Conseguiu resolver sua duvida? Por favor me mande um retorno. Estou aguardando. Abraços Att Luiz Maia
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

Ainda não funciona, os dados que eu precisam não vem, a consulta não retorna nada, mas tô tentando.   Eu chego lá....     Att Regis 
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis, Faça o seguinte, me mande um print do seu DER que eu faço a consulta pra vc. Me fale os dados que quer que retornae e de qual tabela quer os JOINs. Estou aguardando. Abraços Regis Luiz Maia
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

Oi, me desculpa, mas eu não sei o que DER, estou aprendendo tudo isso agora, é tudo muito novo, estou me esforçando eu juro, mas estou começando a me sentir um completo idiota, eu gostaria de saber tudo logo de cara, mas não sei, até hoje eu me sentia bem aprendendo isso, me via fazendo coisas funcionarem, mas hoje estou me questionando, não sei o que é HTML, como muda fonte, e as vezes tenho um post fechado pelo instrutor como se eu tivesse a obrigação de ter  entendido, lamento, se eu tenho postado 10 vezes a mesma pergunta e se eu as vezes não entendo, mas estou me esforçando para aprender, e gostaria que os instrutores tivesse um pouco de paciência neste momento, tenho 44 anos e estou me esforçando para entender tantas coisas ao mesmo tempo. Então poderia me ajudar entender o que é DER e como eu te envio?   DER para mim é Receita depois de descontado os impostos, mas acho que não é isso na programação, correto?   Att   Regis
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis,   Sem problema, sei que esta aprendendo. Todos nos passamos por isto. Mas esta indo pelo caminho errado. Tem que aprender os fundamentos primeiro. Não dá pra cair no Aspnet sem saber outras coisas basicas.   HTML, javascript, CSS e transact sql são fundamentos básicos para um desenvolvedor. Não "nasce" um desenvolvedor aspnet da noite pro dia, se fosse assim eu nem teria emprego e um salario consideravelmente bom! :0)   Tive que estudar muuuuuuuuuuuuuuito, e se vc se esforçar, vai chegar lá. Mas vá subindo um degral de cada vez na escada. Começe pelos fundamentos pra depois pegar no pesado mesmo.   Estaremos aqui para tirar quaisquer que sejam suas dúvidas. Estamo aqui para te ajudar, mas vc precisa entender as respostas tb. Nos consultores tentamos usar de ums didatica bem facil e intuitiva, caso não enteda algo, tem todo direito de exigir explicações. Mas precisamos estar "falando a mesma lingua" nos chamados.   Se eu te passar um solução do qual vc não sabe do que estou falando, isto não é solução. Acaba virando outra duvida na sua cabeça e assim vamos alimentando uma bola de neve....   Mas não esquente não, como ja disse tb passei por isto antes. Corra atras que vc da conta do recado. Mas estude estes fundamentos primeiro.   Quanto ao DER que significa Diagrama de Entidade Relacional nada mais é que sua modelagem de dados, segue uma abaixo para ver:       Abraços Att Luiz Maia
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

Acho que não está retornando nada porque a idéia inicial estava errada, bom, mas de qualquer forma eu tenho que aprender fazer consulta em duas tabelas, mas acho que não é um inner join , acho que seria um while, veja se eu não estou certo, olha só a consulta   ALTER PROCEDURE [dbo].[SP_SELECT_RELATIONSHIP_USER_I] ( @Identifier nvarchar(50), @UserNum bigint ) AS BEGIN DECLARE @IdNumI bigint IF NOT EXISTS(SELECT 1 FROM cc_UserIdentifier WHERE IDENTIFIER = @Identifier) BEGIN SELECT 2 AS TIPO, 'REGISTRO NÃO ENCONTRADO NA TABELA DE PARCEIROS COMERCIAIS.' AS MENSAGEM END IF NOT EXISTS(SELECT 1 FROM cc_Relationship WHERE IDNUM = @UserNum) BEGIN SELECT 2 AS TIPO, 'LICENÇA NÃO ENCONTRADA.' AS MENSAGEM END ELSE BEGIN SELECT @IdNumI = IDNUM FROM cc_Relationship WHERE IDI = @UserNum END SELECT UserName, Email, Language, Sex, Birth, NameFantasy, FunctionCompany, WebSite FROM cc_User WHERE (Identifier = @Identifier) AND (UserNum = @IdNumI) ENDAqui só mostra um registro na consulta, mas tem 3 registros, então ele tem que consultar os 3, eu tenho que pesquisar em duas tabelas, o mesmo que pegar todos os registros da cc_Order que aparecem na tabela cc_Relationship, também não funciona, agora está retornando um dado sim, mas não o que eu quero, eu acho que teria que ser While existisse registro a serem pesquisados, ele pesquise e retorna todos os registros encontrados, não seria isso? O inner join não está pegando os dados que eu quero, ele pegar os dados que são comuns nas duas, mas o que eu preciso é pegar os dados da tabela cc_User que corresponda aos dados da tabela cc_Relationship, ou mesmo pegar os dados da tabela cc_Order que correspondam aos dados da tabela cc_Relationship, nao importa a tabela, o importante é pegar todos os dados que correspondam a pesquisa.     Acho que assim com a consulta montada fica mais fácil entender o que eu estou tentando dizer   Valew Regis      
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis, O while é para varrer uma coleção de registros na linguagem de SQL. Se quer pegar dados de duas tabelas deve usar JOIN, mas existem diferentes tipos de join:   Inner, left, right, outer e etc...   Provavelmente sua query retorna um registro pq vc esta usando a cláusula WHERE, que serve justamente para filtrar os registros.   Quando vc usa:               WHERE (Identifier = @Identifier) AND (UserNum = @IdNumI)   a query so vai trazer um registro mesmo.   Me mande o DER com as duas tabelas (cc_User e cc_Relationship), me diga os dados que quer que retorne, que eu mesmo monto o SP pra vc, ai depois vc pode dar uma estudada nela e implementar novas situações baseadas nesta que vou fazer pra vc.   Mas antes disto, me passa as constraints do relacionamento entre as duas tabelas. obs: Caso não saiba o que é uma constraint, é o link que liga duas tabelas, ou seja a PK (primary key) ou chave primaria da tabela PAI com a FK (Foreign Key) Chave estrangeira da tabela filho. Veja no Diagrama que te mandei abaixo, as tabelas PRODUTO e PRODUTO_ITEM, repare que a chavinha PRODUTO_ID aparece na tabela pai e na filho ela se chama     Estou aguardando.
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

continuando...   na filha ela se chama PRODUTO_PROD_ID, e tem um FK na frente.   Estou aguardando seu DER.   Por favor, me explique tb o contexto de sua aplicação. Onde quer chegar, o que quer fazer, o que precisa e etc.... assim posso te orientar melhor!!!   Abraços   Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis, ainda estou aguardando seu retorno com o DER. Abraços   Att Luiz Maia
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

  O que eu preciso é listar todos os campos UserName, Email, Country, City, Language da tabela cc_user Where o Identifier = @Identifier e IdI = @IdI , só que eu só posso pesquisar o IdI da tabela cc_RelationShip, pois é o único lugar onde ele aparece, então eu tenho que pesquisar na tabela cc_Relationship e pegar os registros (IdNum) desta tabela, recebendo o IdNum da tabela cc-Relationship where IdI = @IdI e Identifier = @Identifier, entao de posso desses registros tenho que pegar os dados referentes aos IdNum retornados, na minha consulta aqui retornam 3, mas na hora de aparecer na página os registros, só listam 1, mas é isso que eu preciso fazer.     Eu fiz a primeira parte da consulta, conforme te enviei no post anterior, mas na segunda parte que é pegar os resultados da tabela cc_user não funciona aqui.   ReCAPITLULANDO: 1-) Consultar  IdNum relationship where IdI = @IdI e Identifier = Identifier, retorna x registros, consultar na cc_user quais os dados relativos aos IdNum retornados, concluir a consulta e retornar os dados para o sistema.   Tabém preciso listar as últimas inserções feitas na tabela cc_Relationship. Como eu faço essas coisas?   Eu tentei com join inner, mas não consegui.     Valeu   Regis    
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Quais são as PKs e FKs no seu relacionamento?
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

Primary Key = Idrelationship em cc_Relationship  e IdNum cc_User,   pks = IdNum e UserNum     Regis
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis,   Primary key e pks são a mesma coisa. Preciso que vc me diga quais sao os campos co-relativos em suas tabelas para que eu monte o quey para vc. Tipo assim:   Na tabela Categoria tenho a PK IdCategoria e na tabela Produto tenho a FK IdCategoria, entendeu?   Aguardo Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis, ainda estou aguardando sua resposta. Abraços Luiz Maia
GOSTEI 0
Régis Mello

Régis Mello

10/03/2009

eu estou estudando e pesquisando para entender exatamente o que você me pediu. Respondo tão logo eu tenha entendido.   Regis
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Regis,   Primary Key (PK) é o identificador único em sua tabela, que nunca se repete, por exemplo, vc tem uma tabela Categoria, poderia ser criado um campo CodCategoria, que seria um Inteiro auto numerico.   Agora, vc tem outra tabela por exemplo Produto, que tambem precisa de uma PK, que tem que ter as caracteristica de uma PK, por exemplo CodProduto.   Agora vc precisa ter algum tipo de relacionamento entre elas chamado Constraint, onde vc defini as Integridades Referenciais.   Para que a constraint seja valida, vc precisa especificar uma FK ou Foreign Key na tabela filho. No caso acima N para 1, ou seja , uma Categoria tem varios Produtos, mas um Produto pertence somente a uma Categoria.    Logo é necessario a criação da FK na tabela Produto, no caso podemos dar o nome de CodCategoria tb, pode ter o mesmo nome da PK de Categoria.   Logo, Uma PK vira uma FK na tabela N x 1.   Qualquer duvida me diga, ok?   Abracos Att   Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

10/03/2009

Ola Regis,   Como não obtivemos retorno de seu chamado, estamos concluindo o mesmo. Continuamos a sua disposição para eventuais dúvidas.   Abraços Att Luiz Maia
GOSTEI 0
POSTAR