none
Função sql server RRS feed

  • Pergunta

  • Bom dia. Estou com dúvida em função. 

    Como chamar a função?

    ALTER function [dbo].[CENTRO_CUSTO]()
    RETURNS varchar (100)
    begin

    declare @codemp smallint,@NomeccuCRM varchar (50), @claccu varchar (100)

    set @NomeccuCRM = (select new_NomeCentrodeCusto from BRMarinasHomologao_MSCRM.dbo.new_centrodecustoExtensionBase 
    inner join BRMarinasHomologao_MSCRM.dbo.BusinessUnitExtensionBase ON BRMarinasHomologao_MSCRM.dbo.new_centrodecustoExtensionBase.new_UnidadedeNegocioId = BRMarinasHomologao_MSCRM.dbo.BusinessUnitExtensionBase.BusinessUnitId
    where new_name = @claccu and BusinessUnitExtensionBase.new_Codigo = @codemp) 

    return (@NomeccuCRM)

    end

    ................................................................................................................................................................................................................................................

    ................................................................................................................................................................................................................................................

    Esta função, é para comparar uma tabela com outra e verificar se os dados  de uma coluna são iguais.. se não, atualiza a tabela...

    ................................................................................................................................................................................................................................................

    ................................................................................................................................................................................................................................................

    ESTE É O CÓDIGO.... 

    use Integration

    --declarando variaveis
    DECLARE @claccu varchar(20), @desccu varchar(80),@codemp varchar(4),@NomeccuCRM VARCHAR(80);
    DECLARE ccu_cursor CURSOR FOR
    --mostra dados V_CENTRO_CUSTO quando claccu for igual a 1
    select claccu, desccu, codemp from dbo.V_CENTRO_CUSTO where claccu > 0;

    --abre cursor
    OPEN ccu_cursor;
    --fazendo a busca nas linhas começando do primeiro registro
    FETCH NEXT FROM ccu_cursor
    INTO @claccu, @desccu, @codemp;
    WHILE @@FETCH_STATUS = 0


    --if @NomeccuCRM <> @desccu
    --begin
    --print 'centro com nome custo diferente: ' + @NomeccuCRM +' é diferente de' + ' ' +@desccu +' '+ @claccu
    --end
    ----return (@NomeccuCRM)


    --retorna inicio do cursor
    FETCH NEXT FROM ccu_cursor
    --fecha cursor
    CLOSE ccu_cursor;
    --remove referncia cursor
    DEALLOCATE ccu_cursor;

    ................................................................................................................................................................................................................................................

    ................................................................................................................................................................................................................................................

    Não estou conseguindo.. alguém me ajude por favor? =D

    segunda-feira, 12 de novembro de 2012 13:10

Todas as Respostas

  • Bom dia ! para chamar uma função é bem simples "Schema.[nome da função](Parametros)", porem reparei em 2 coisas que voce disse, voce diz que o objetivo é comparar e atualizar tabelas, para isto acredito que uma procedure seja mais util que uma função que normalmente é utilizada para fazer algum calculo.

    Outra coisa, na sua função não tem parametros de entrada, não ha parametros de entrada na função ?


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 12 de novembro de 2012 13:39
  • Isa,

    Concordo com o Alexandre, a grande diferença de toda e qualquer função em relação a Stored Procedure, esta justamente relacionada:

    1.  A obrigatoriedade de utilizarmos parâmetros de entrada de valores
    2. Também uma função sempre vai retornar algo.

    As funções são utilizadas e criadas para se trabalhar com comandos DML com objetivo de retornar dados de acordo com sua estrutura. Outro detalhe as funções podem ter finalidades específicas, como consulta de dados, cálculos, comparação de valores e strings.

    Como você esta realizando uma análise condicional entre duas ou mais tabelas e depois deseja realizar a atualização dos dados, esse tipo de procedimento não é utilizado em funções. Sendo assim, transforme esta função em uma Procedure, você vai observar que poderá ter maiores benefícios em relação a possibilidade de utilizar mais recursos e também a forma que o SQL Server vai trabalhar.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 13 de novembro de 2012 13:38