Ir para conteúdo
Fórum Script Brasil

Cosme Ferreira

Membros
  • Total de itens

    26
  • Registro em

  • Última visita

Posts postados por Cosme Ferreira

  1. Prezados,

    Estou com uma dificuldade com o Inner Join + Update, segue o code:

    conexao.execute("update CAT_PROD x INNER JOIN CAT_CES y ON y.ces_prod_cat = x.prod_cod SET SUM(x.prod_estoq-y.ces_qtde)")

    Erro:

    Microsoft JET Database Engine error '80040e14'

    Syntax error in UPDATE statement.

    Desde já agradeço

    Bom dia Raposo.

    Cara, entendi o que você precisa, mas acredito que desta forma não irá conseguir fazer.

    A sintaxe para update utilizando join é a seguinte:

    update X set X.Campo = <ValorDesejado>

    from CAT_PROD X

    inner join CAT_CES Y

    on ( Y.ces_prod_cat = X.prod_cod)

    Para o caso em questão, acho melhor jogar o valor para variáveis e dar update na tabela X.

    Fica a dica. ;)

  2. Bom dia.

    Segue uma outra função que utilizo bastante. Estive envolvido em um projeto que visava acompanhar a rota de vários caminhões através de informações geradas pelo Autotrac. Este sistema enviava as informações de latitude e longitude separados por ',' (virgula), as informações de estado (em movimento, parado para conferencia de carga, parada para higiene, etc...) vinham em outro campo separados por ':' (dois pontos). Era muito chato ficar desmembrando estas informações que a cada momento vinham de uma forma.

    Para isso, escrevi a função fncDesmembraString (muito parecida com o sprit do C#).

    A função pede dois parâmetros: quebra e texto.

    A quebra, é o caractere utilizado para separar as informações contidas no texto. O retorno é exibido em forma de tabela.

    Modo de utilização:

    select * from dbo.fncSiDesmembraString(',','1,2,3,4,5,6')

    Retorno:

    parametro

    ---------

    1

    2

    3

    4

    5

    6

    A função trabalha como se fosse uma tabela, podendo realizar Group, having, where, etc...

    select COUNT(*) as qtd,

    parametro

    from dbo.fncSiDesmembraString(',','1,2,3,4,5,6,2,4,5,2')

    group by parametro having COUNT(*) > 1

    Retorno:

    qtd parametro

    ----------- ----------

    3 2

    2 4

    2 5

    Segue o código:

    CREATE FUNCTION [dbo].[fncSiDesmembraString]

    (

    @quebra char(1),

    @Texto varchar(8000)

    )

    RETURNS @Tabretorno TABLE

    (

    parametro varchar(8000)

    )

    as

    begin

    Declare @tamanho int

    set @tamanho = len(@Texto)

    declare @posicao int,

    @caracter char(1),

    @cache varchar(8000)

    set @posicao = 1

    while @posicao <= @tamanho+1

    begin

    select @caracter = substring(@texto, @posicao,1)

    if (@caracter = @quebra)

    begin

    --select @posicao , @tamanho

    insert into @Tabretorno

    values (@cache)

    set @cache = ''

    end

    else if (@posicao = @tamanho + 1)

    begin

    insert into @Tabretorno

    values (@cache)

    end

    else

    begin

    set @cache = isnull(@cache,'') + @caracter

    --select @cache

    end

    set @posicao = @posicao + 1

    end

    return

    end

  3. Olá pessoal.

    Um amigo que trabalha comigo tem problemas em formatar datas e acabei escrevendo uma funçãozinha para ajudá-lo. Acredito que mais algumas pessoas possam se interessar pela função.

    A ideia é passar a data e o formato desejado.

    Vamos supor que o retorno desejado seja "12/12/2011".

    para isso bastaria passar a data e o formato 'DD/MM/YYYY".

    Mas poxa Cosme, eu gostaria de exibir a hora também. Para isso bastaria passar 'DD/MM/YYYY HH:MI'.

    A função aceita:

    year yy , yyyy

    quarter qualquer

    month mm

    dayofyear dy

    day dd

    week wk

    weekday dw

    hour hh

    minute mi

    second ss

    millisecond ms

    microsecond mcs

    nanosecond ns --MSSQL 2008

    TZoffset tz --MSSQL 2008

    ISO_WEEK isowk --MSSQL 2008

    e os separadores:

    '/' - barra

    '-' - hifen

    ':' - dois pontos

    ' ' - espaço em branco

    Não existe a necessidade de passar um separador entre os parâmetros.

    Não existe ordem para utilizar os separadores. Os minutos podem vir antes da hora, o mês antes do ano, os segundos junto ao dia.

    Exemplo de uso:

    select dbo.fncFormatDate(GETDATE(),'dd/mm/yyyy')

    Retorno: 12/12/2011

    select dbo.fncFormatDate(GETDATE(),'dd/mm/yyyy hh:mi') --

    Retorno: 12/12/2011 20:46

    select dbo.fncFormatDate(GETDATE(),'DD/MM/YY')

    Retorno: 12/12/11

    select dbo.fncFormatDate(GETDATE(),'YYYY-SS-DD:MM/qualquer')

    Retorno: 2011-18-12:12/4

    Caso tenham ficado interessado, segue o código:

    CREATE function [dbo].[fncDatePart]

    (

    @Data datetime,

    @Part varchar(5)

    )

    returns int

    as

    begin

    declare @retorno int

    if @part = 'yy'

    begin

    select @retorno = convert(int,substring(ltrim(rTrim(str(DATEPART(YY,@data)))),3,2))

    end

    else if @part = 'yyyy'

    begin

    select @retorno = DATEPART(YYYY,@data)

    end

    else if @part = 'qualquer'

    begin

    select @retorno = DATEPART(qualquer,@data)

    end

    else if @part = 'mm'

    begin

    select @retorno = DATEPART(MM,@data)

    end

    else if @part = 'dy'

    begin

    select @retorno = DATEPART(DY,@data)

    end

    else if @part = 'dd'

    begin

    select @retorno = DATEPART(DD,@data)

    end

    else if @part = 'wk'

    begin

    select @retorno = DATEPART(WK,@data)

    end

    else if @part = 'dw'

    begin

    select @retorno = DATEPART(DW,@data)

    end

    else if @part = 'hh'

    begin

    select @retorno = DATEPART(HH,@data)

    end

    else if @part = 'mi'

    begin

    select @retorno = DATEPART(MI,@data)

    end

    else if @part = 'ss'

    begin

    select @retorno = DATEPART(SS,@data)

    end

    else if @part = 'ms'

    begin

    select @retorno = DATEPART(MS,@data)

    end

    else if @part = 'mcs'

    begin

    select @retorno = DATEPART(MCS,@data)

    end

    else if @part = 'ns'

    begin

    select @retorno = DATEPART(NS,@data)

    end

    else if @part = 'tz'

    begin

    select @retorno = DATEPART(TZ,@data)

    end

    else if @part = 'isowk'

    begin

    select @retorno = DATEPART(ISOWK,@data)

    end

    else

    select @retorno = ''

    return @retorno

    end

    GO

    CREATE function [dbo].[fncFormatDate]

    (

    @Data datetime,

    @Formato varchar(30)

    )

    returns varchar(256)

    as

    begin

    --remover

    --declare @Data datetime,

    -- @Formato varchar(30)

    --set @Data = GETDATE()

    --set @Formato = 'dd/mm/yyyy hh:mi:ss'

    /*

    year yy , yyyy

    quarter qualquer

    month mm

    dayofyear dy

    day dd

    week wk

    weekday dw

    hour hh

    minute mi

    second ss

    millisecond ms

    microsecond mcs

    nanosecond ns

    TZoffset tz

    ISO_WEEK isowk

    */

    declare @Retorno varchar(256)

    set @Retorno = ''

    declare @formatos table (cmd varchar(12), part varchar(5))

    insert into @formatos (cmd, part)

    select 'year' as cmd,

    'yy' as part

    union all

    select 'quarter' as cmd,

    'qualquer' as part

    union all

    select 'month' as cmd,

    'mm' as part

    union all

    select 'dayofyear' as cmd,

    'dy' as part

    union all

    select 'day' as cmd,

    'dd' as part

    union all

    select 'week' as cmd,

    'wk' as part

    union all

    select 'weekday' as cmd,

    'dw' as part

    union all

    select 'hour' as cmd,

    'hh' as part

    union all

    select 'minute' as cmd,

    'mi' as part

    union all

    select 'second' as cmd,

    'ss' as part

    union all

    select 'millisecond' as cmd,

    'ms' as part

    union all

    select 'microsecond' as cmd,

    'mcs' as part

    union all

    select 'nanosecond' as cmd,

    'ns' as part

    union all

    select 'TZoffset' as cmd,

    'tz' as part

    union all

    select 'ISO_WEEK' as cmd,

    'isowk' as part

    union all

    select 'year' as cmd,

    'yyyy' as part

    union all

    select '/' as cmd,

    '/' as part

    union all

    select '-' as cmd,

    '-' as part

    union all

    select ':' as cmd,

    ':' as part

    union all

    select ' ' as cmd,

    ' ' as part

    declare @parts table (idx int, part varchar(5), valor varchar(256))

    declare @part varchar(5),

    @idx int,

    @valor varchar(256)

    while exists(select 1 from @formatos)

    begin

    select top 1 @part = part

    from @formatos

    select @idx = PATINDEX('%'+@part+'%',@Formato)

    if @idx > 0

    begin

    if (@part not in ('/','-',':',' ') )

    delete from @parts where idx = @idx

    insert into @parts (idx, part)

    select @idx, @part

    end

    delete from @formatos where part = @part

    end

    declare @char char(01),

    @count int

    set @count = 1

    while (@count < len(@formato))

    begin

    select @char = SUBSTRING(@Formato,@count,1)

    if (@char in ('/','-',':',' '))

    begin

    delete from @parts where idx = @count

    insert into @parts (idx, part, valor)

    select @count, @char, @char

    select @Formato = substring(@Formato,1,@count -1 ) + '&' + substring(@Formato,@count + 1,LEN(@Formato))

    end

    set @count = @count + 1

    end

    --declare @final table (idx int, valor varchar(256))

    while exists(select 1 from @parts)

    begin

    select top 1 @idx = idx,

    @part = part,

    @valor = valor

    from @parts

    order by idx

    if @valor = ' '

    begin

    select @Retorno = @Retorno + '#'

    end

    else if len(isnull(@valor,'')) = 0

    begin

    --insert into @final (idx, valor)

    select @Retorno = @Retorno + ltrim(rtrim(str(dbo.fncDatePart(@Data,@part))))

    end

    else

    begin

    select @Retorno = @Retorno + @valor

    end

    delete from @parts where idx = @idx

    end

    select @retorno = replace(@Retorno,'#',' ')

    return @retorno

    end

  4. Boa noite.

    Dê preferencia a um bom e velho while em parceria com tabela temporária (melhor ainda se usar variáveis do tipo table), ao invés de cursores...

    Apenas uma dica de quem já sofreu muito com cursores x desempenho.

  5. Lá vai uma função... lol....

    use pecus_d
    go
    alter FUNCTION fncBuscaParametro
    (
    @Texto varchar(8000),
    @expressao varchar(256)
    )
    RETURNS @Tabretorno TABLE 
    (
        cpf            varchar(256)    
    )
    as
    begin
    
        declare @tamanho    int,
            @posicao        int,
            @cpf            int,
            @numCpf         varchar(20),
            @caracter       char(1),
            @ultimoCaracter char(1)
            
        
        set @tamanho        = len(@Texto)
        set @posicao        = 1
        set @cpf            = 0
        set @caracter       = ''
        set @numCPF      = ''
        
        
        set @texto = REPLACE( REPLACE(@texto,':','') , ' ', '')
        
        set @cpf = PATINDEX('%'+@Expressao+'%',@texto)
            
            if @cpf > 0
            set @posicao = @cpf + len(@Expressao)
        
        while (@posicao <= @tamanho)
        begin
            
            set @caracter = substring(@texto,@posicao,1)
            
            if @caracter in ('0','1','2','3','4','5','6','7','8','9')
            begin
              set @numCpf = @numCpf + @caracter
            end
            else
            begin
                select @posicao = @tamanho + 1
            end
            
            
            set @posicao = @posicao + 1
        end
        
        
        
        
    
    
       insert into @tabretorno 
       values(@numCPF)
    
       
       return
    end
    
     go
    
    --Para utilizar:
    
    select * from fncBuscaParametro('<?xml version = "1.0" encoding = "UTF-8"?> <Usr_Acs xmlns="Oficial"> <UsrIdfUsr>39320</UsrIdfUsr> <UsrNumCpf>44444444444</UsrNumCpf> <UsrCodSit>A</UsrCodSit> ','<UsrNumCpf>')

    --você pode alterar a função pra não retornar o tipo table.... fiz assim porque gosto do tipo table.. hauahuahuahauah

  6. Bom dia Sr. JavaScript... =' )

    Cara, simulei duas formas para fazer, e fico com a segunda..rs...

    create table #tabCdCliente (codCliente int, codLogradouro int, codVendedor int, nomecliente varchar(100))
    create table #tabCdVendedor (codVendedor int, codLogradouro int, nomeVendedor varchar(50))
    
    insert into #tabCdCliente
    select 1, 1, 2, 'Pedro Romeu'
    union all
    select 2, 3, 1, 'Maria Gabriela'
    union all
    select 3, 5, 5, 'Jéssica Lopes'
    
    insert into #tabCdVendedor
    select 1, 1, 'Ana da Silva'
    union all
    select 2, 3, 'João Luis'    
    union all
    select 3, 1, 'Pedro Bial'
    
    
    
    --Primeira forma
    select * 
    from #tabCdVendedor V
    where codVendedor not in (select codVendedor from #tabCdCliente)
    
    --Segunda Forma
    select V.*
    from #tabCdVendedor V
    left join  #tabCdCliente C
      on (    C.codVendedor = V.codVendedor)
    where isnull(C.codCliente,0) = 0
    
    
    
    drop table #tabCdCliente
    drop table #tabCdvendedor

  7. Bom dia Bráulio! Espero que esteja tudo bem contigo.

    Se o usuário não usará os 10 mil registros de uma só vez, então não há necessidade de processar os 10 mil e enviá-los a uma sessão na máquina. Acredito que fica realmente inviável. No meu ponto de Vista, a forma que está agora é a ideal(entre as duas propostas).

    Agora, uma ideia: porque não enviar o número da sessão do usuário (no site) ao banco, gravar os 10 mil registros em uma tabela juntamente com o numero da sessão.

    Sempre, antes de inserir os registros, você verifica se já existe registros gravados com o mesmo número de sessão (que o site enviou), se já existir, você deleta todos desta sessão, e os recria novamente. Essa tabela nova, com as informações oriundas das 10 tabelas que estão envolvidas no select anterior, não teria joins, apenas as informações necessárias. Voce criaria indices e iria ganhar tempo, pois não teria que consultar com joins todas as vezes.. .naquela sessão, você sempre buscaria na mesma tabela. Uma implementação neste modelo, seria você criar o campo página nesta nova tabela... uma rotina setaria este campo para a página correspondente conforme atingisse a qtd de 70 registros(ou customizável).

    não sei se ficou clara minha ideia, mas acredito que assim seria melhor. Qualquer coisa pode perguntar que eu explico novamente.

    Abração manow. boa sorte

  8. Cara... isso é problema na configuração da conta ou então o servidor não permite esse tipo de conexão... lembra o lance do relay.. o servidor tem que permitir.. dá uma pesquisada cara... ou então, tente fazer com outro server.....

    Se fosse falha na rotina, não teria pego o retorno de erro do server de e-mail.

    Tentei configurar uma conta do gmail aqui no meu server e não consegui....

    Opa opa opa... agora foi! hauhauahuhauahuhuahauah pelo gmail....

    Da uma olhada neste tutorial.. ensina a configurar o gmail no database mail....

    :) :) :)

    http://sqlfromhell.wordpress.com/2010/04/0...il-com-o-gmail/

    Tente ae manow... espero que de certo!

    Abração e vai nos mantendo informado se deu ou não certo!..

  9. Hahuabhahauhauahua que da hora!!!

    Cara, deu a mensagem e o e-mail chegou pra você ou não?

    executa essa procedure aqui e coloca teu e-mail em @recipients... tem que chegar pra você. se tudo foi configurado certo, tem que enviar....

    EXEC msdb.dbo.sp_send_dbmail @recipients='teu e-mail aqui!!!!!!!!',

    @subject = 'Teste de email',

    @body = 'Este é o corpo de um e-mail de teste!!! tem que chegar! hauhauahuahauah',

    @body_format = 'HTML'

    Cara... tomara que tenha dado certo!

  10. Opa.. bao também..rs...

    Cara, seguinte... o database mail não está disponível para o Express... :(

    Mas não fique triste, alguns malucos conseguiram habilitar... porém, eu não testei... vamos tentar e montar um tutorial pra gente disponibilizar aqui pro pessoal.

    Vamos começar....

    Primeira coisa a se fazer (segundo os textos que li)

    O SQL Express possui todas as procedures necessárias, serviços, etc .. para manipulação de email. O problema é que quando tenta enviar, diz que o arquivo "DatabaseMail90.exe" não pode ser encontrado ou iniciado... algo assim... Entende-se que o arquivo não existe na sua máquina... então vamos lá..rs.. vou compactar esses arquivos e disponibilizar pra você fazer download em algum lugar... pera ae... pronto... rs... http://www.4shared.com/file/7CvkR__Z/ArquivosSql.html

    Agora é só copiar estes tres arquivos para a pasta MSSQL\Binn

    se não me engano, tem que criar estas procs no banco msdb

    -- sysmail_start_sp : allows databasemail to process mail from the queue 
    CREATE PROCEDURE sysmail_start_sp
    AS
        SET NOCOUNT ON
        DECLARE @rc INT 
       DECLARE @localmessage nvarchar(255)
    
        ALTER QUEUE ExternalMailQueue WITH STATUS = ON
        SELECT @rc = @@ERROR
        IF(@rc = 0)
        BEGIN
          ALTER QUEUE ExternalMailQueue WITH ACTIVATION (STATUS = ON);
           SET @localmessage = FORMATMESSAGE(14639, SUSER_SNAME())
           exec msdb.dbo.sysmail_logmailevent_sp @event_type=1, @description=@localmessage
        END
    RETURN @rc
    e criar esta também no banco msdb : lol.... :)
    -- sysmail_stop_sp : stops the DatabaseMail process. Mail items remain in the queue until sqlmail started 
    CREATE PROCEDURE sysmail_stop_sp
    AS
        SET NOCOUNT ON
        DECLARE @rc INT
       DECLARE @localmessage nvarchar(255)
      
        ALTER QUEUE ExternalMailQueue WITH ACTIVATION (STATUS = OFF);
        SELECT @rc = @@ERROR
        IF(@rc = 0)
        BEGIN
           ALTER QUEUE ExternalMailQueue WITH STATUS = OFF;
           SELECT @rc = @@ERROR
           IF(@rc = 0)
           BEGIN
              SET @localmessage = FORMATMESSAGE(14640, SUSER_SNAME())
              exec msdb.dbo.sysmail_logmailevent_sp @event_type=1, @description=@localmessage
           END
        END
    RETURN @rc
    Cara... faça esses lances e vamos ver se conseguimos habilitar o database mail no express.... Se tiver algum problema, eu vou ler novamente o doc que achei.. o foda que tah em alemão! hauhauaua... tenho que ficar traduzindo trecho a trecho... :( Abraços e espero que dê certo.... Opa... <editando> cara.. pra habilitar, execute essa $#&&?!£ aqui.... lol....
    USE Master
    GO
    sp_configure 'show advanced options', 1
    GO
    reconfigure with override
    GO
    sp_configure 'Database Mail XPs', 1
    GO
    reconfigure 
    GO
    sp_configure 'show advanced options', 0
    GO
    reconfigure --(ou reconfigure with override)
    <editando novamente>.... rs..... O Database Account pode ser habilitado através da proc sysmail_add_account. To usando um um servidor fictício.Importante lembrar, que o servidor de email que será usado, deve aceitar relay.
    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'TSQLMASTER',
        @description = 'Conta de testes do Database Mail',
        @email_address = 'tsqlmaster@tsqlmaster.net',
        @display_name = 'tsqlmaster',
        @username='tsqlmaster@tsqlmaster.net',
        @password='123456',
        @mailserver_name = 'mail.tsqlmaster.net'
    Agora precisamos criar um mail profile, e faremos isso usando a proc sysmail_add_profile_sp.
    EXECUTE msdb.dbo.sysmail_add_profile_sp
           @profile_name = 'MeuPerfil',
           @description = 'Perfil usado no Database Mail'
    Agora vamos relacionar o nosso perfil a conta de e-mail criados nos passos anteriores.
    EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'MeuPerfil',
        @account_name = 'TSQLMASTER',
        @sequence_number = 1
    Agora, use a proc sysmail_add_principalprofile para conceder ao Database Mail Profile, acesso ao msdb public database role, e fazer deste perfil o padrão do DataBase Mail.
    EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
        @profile_name = 'MeuPerfil',
        @principal_name = 'public',
        @is_default = 1;
    Agora, vamos testar o envio de emails através do SQL Server:
    declare @body1 varchar(100)
    set @body1 = 'Server :'+@@servername+ ' Meu primeiro email através do banco '
    
    EXEC msdb.dbo.sp_send_dbmail @recipients='admin@tsqlmaster.net',
        @subject = 'Teste de email',
        @body = @body1,
        @body_format = 'HTML

    O Sql Server apresentará a seguinte mensagem:

    mail queued

    Se não der essa mensagem, ae lascou-se...rs... se não der certo a gente v o que faz..r.s... tenta ae... vai me mantendo informado.. pois to curioso pra saber se dá certo.

    Abração manow!

  11. Ola Pessoal

    Bom dia a todos!

    preciso da ajuda de voces para uma duvida!

    Seguinte, tenho uma sp_email, para compactar e enviar o backup do sql por e-mail

    esta funcionando sem problemas, uso uma dll chamada ChilkatMail_v7_9.dll, de uns dias pra ca

    estou tendo muitos problemas com essa dll, e muitos clientes usam backup na maquina e para minha segurança tambem verifico

    os backups no e-mail, A caso de um eventual problema na maquina do cliente, eu tenho seu backup

    por tanto oque preciso é de uma outra dll que tenha a mesma funçao, para que eu possa ficar mais tranquilo quanto a dados de cliente.

    alguém teria uma outra pra me dizer?

    Um bom dia a todos

    abraço

    Olá Diego, espero que esteja tudo bem contigo.

    Desculpe a indiscrição, mas por acaso essa sua sp_email utiliza-se do recurso Database Mail(nativo do SQL Server 2008) ou é uma rotina fazendo referencia a esta ChilkatMail_v7_9.dll?

    Caso não seja o recurso nativo, você poderia utilizar o Database Mail atraves da proc sp_send_dbmail, localizada no banco msdb. Se quiser dicas de como configurar, me avise aqui q eu o ajudo.

    Só pra constar, eu utilizo o database mail e nunca tive nenhum problema. É realmente muito estável.

    Abração e boa sorte nesta sua empreitada.

    Fico à disposição.

  12. hauhauahauhauahauhau... eu tava montando um esquema pra te ajudar... hauhauahauha sai pra almoçar.. .voltei terminei o esquema...

    ae agora vim postar, e vi que você havia resolvido.....

    mas, caso queira dar uma olhada.. eu tentei simplificar... nem comentei o código...

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    
    
    namespace Ordenacao
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                string Caracter = "";
                string Parametro = "";
    
    
    
                while ((Caracter != "X") && (Caracter != "x"))
                {
                    Console.Clear();
                    Console.WriteLine("Digite o número desejado e pressione <ENTER>. Para finalizar o imput de números, digite <X> e pressione <ENTER>.");
                    Caracter = Console.ReadLine();
    
                    try
                    {
                        int validaNumero = Convert.ToInt32(Caracter);
    
                        if (Parametro.Length > 0)
                        {
                            Parametro = Parametro + "," + Caracter;
                        }
                        else
                        {
                            Parametro = Caracter;
                        }
    
                    }
                    catch
                    {
    
                        if ((Caracter == "X") || (Caracter == "x"))
                        {
                            TrataParametro(Parametro);
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Digite apenas números!");
                            Console.Read();
                        }
    
    
    
    
    
                    }
    
                }
    
               
            }
    
    
            public static void TrataParametro(string Parametro)
            {
                string[] Parametros = Parametro.Split(',');
    
                int QtdParametros = Parametros.Length;
    
                int[] Numeros = new int[QtdParametros];
    
    
                int i = 0;
                while (QtdParametros > i)
                {
                    Numeros[i] = Convert.ToInt32(Parametros[i]);
    
                    i = i + 1;
                }
    
                i = 0;
    
                int _numero = 0;
    
                int x = 0;
                while ((QtdParametros) > x)
                {
                    i = 0;
                    while (QtdParametros - 1 > i)
                    {
                        if (Numeros[i + 1] < Numeros[i])
                        {
                            _numero = Numeros[i];
                            Numeros[i] = Numeros[i + 1];
                            Numeros[i + 1] = _numero;
                        }
    
                        i = i + 1;
                    }
                    x = x + 1;
                }
    
    
                double resto;
                string impares = "", pares = "";
                i = 0;
                while (QtdParametros - 1 > i)
                {
                    resto = Numeros[i] % 2;
                    if (resto > 0.00)
                    {
    
                        if (impares.Length > 0)
                        {
                            impares = impares + "," + Numeros[i].ToString();
                        }
                        else
                        {
                            impares = Numeros[i].ToString();
                        }
    
                    }
                    else
                    {
                        if (pares.Length > 0)
                        {
                            pares = pares + "," + Numeros[i].ToString();
                        }
                        else
                        {
                            pares = Numeros[i].ToString();
                        }
                    }
    
                    i = i + 1;
                }
    
    
    
                Parametro = impares;
                if (Parametro.Length > 0)
                {
                    Parametro = Parametro + ',' + pares;
                }
                else
                { 
                    Parametro = pares;
                }
    
                string[] resultado = Parametro.Split(',');
    
                
    
    
                i = 0;
                Console.Clear();
                while (resultado.Length > i)
                {
                    Console.WriteLine(resultado[i]);
    
                    i = i + 1;
                }
    
                Console.Read();
            }
    
        }
    }

  13. só pra ajudar, coloquei um esquema pra retornar a diferença em horas. Tive dor de cabeça com isso há um tempo atrás:

    DECLARE @TempoTotal INT
    select @TempoTotal = DATEDIFF(Mi,'2010-12-27 14:10:15.653', '2010-12-27 15:28:15.653')
    
    
    
    select    @TempoTotal TempoEmMinutos,
            (RIGHT('0' + CAST((@TempoTotal / 60) As VARCHAR(2)),2) + ':' + RIGHT('0' + CAST((@TempoTotal % 60) As VARCHAR(2)),2) ) as TempoEmHoraMinutos

    Espero ter ajudado.

  14. Se isto ajudar...

    ind ativo é um campo bit... que aceita 0 ou 1... 0 para inativo, 1 para ativo, ou então depende da tua lógica ;)

    declare @tabTeste table (nome varchar(256), endereco varchar(256), indAtivo bit)

    insert into @tabTeste (nome, endereco, indAtivo)

    select 'Gertrudes Lima',

    'Rua das flores',

    0

    union all

    select 'Adoriram Barbosa',

    'Rua dos Galápagos',

    1

    select *

    from @tabTeste

    where indAtivo = 1

  15. Bom, não sei se ajudo, mas dias atrás fiz uma função parecida com o Split do C#:

    Exemplo:

    select * from fncSiDesmembraString(':','1:2:3:4:5:6:7:8:8090')

    retorno:

    parametro

    ----------------

    1

    2

    3

    4

    5

    6

    7

    8

    8090

    (9 linha(s) afetadas)

    Com isso, você pode passar varios parametros e colocar sua proc em um while....

    Exemplo:

    declare @parametros table (parametro int, Id int identity)

    insert into @parametros

    select *

    from fncSiDesmembraString(':','1:2:3:4:5:6:7:8:8090')

    declare @id int,

    @param int

    set @id = 1

    while exists(select 1 from @parametros where Id = @id)

    begin

    select @param = parametro from @parametros where Id = @id

    --aqui você chama sua proc

    -- EXEC sp_cod_prod @param

    select @param

    ----

    set @id = @id + 1

    end

    se quiser a função, é só pedir que eu posto aqui! :)

×
×
  • Criar Novo...