Ir para conteúdo
Fórum Script Brasil

Cosme Ferreira

Membros
  • Total de itens

    26
  • Registro em

  • Última visita

Tudo que Cosme Ferreira postou

  1. 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. Cosme Ferreira

    Cursor no SQL

    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. O caracter % funciona como o * funcionava no DOS... e acho que "funciona" ainda no rWindows! select * from clientes where nomeCliente like '%sil%'
  6. Nessa eu fiquei no chinelo... lol.... bora jogar a função no lixo.. lol Nunca trabalhei com xml no banco, mas vou dar uma pesquisada porque achei interessante!
  7. 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
  8. 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
  9. 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
  10. 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!..
  11. Cara, por favor.. executa estes selects aqui: select sent_status, from msdb.dbo.sysmail_mailitems select * from msdb.dbo.sysmail_event_log Posta o retorno.. por favor...
  12. 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!
  13. 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!
  14. Qual versão do Windows você está tentando instalar?
  15. Acabei de pesquisar e sua informação realmente procede Fulvio. Está presente à partir da versão 2005.
  16. 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.
  17. Não curto muito dataset tipado e pra falar a verdade nem sei bem como utilizar... um conselho que te dou é trabalhar com ORM, fica muito mais fácil e melhor organizado.
  18. 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(); } } }
  19. Cara, estou indo pra casa agora, mas chegando lá eu logo aqui no fórum e te dou umas dicas... seguinte.. vai dando uma olhada neste link, que ensina a criar um linked server: http://support.microsoft.com/kb/222937 Assim que chegar em casa, eu logo e vamos trocando ideia. Com o linked server você vai conseguir fazer esta importação.... eu te dou as dicas....... Abraço e até daqui a pouco.
  20. Olá André. você possui um script pronto para importar estes dados? Caso seja um script em SQL, você poderia criar uma Job e schedular para rodar à noite.
  21. 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.
  22. Não seria mais fácil uma replicação entre os bancos? Mais garantido hein....(odeio trigger).... lol
  23. Boa tarde. :) Se puder postar como está chegando o arquivo html. Assim poderiamos pensar em uma rotina pra tratar este arquivo. Aguardo o layout do arquivo html pra poder ajudá-lo. Abraços
  24. 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
  25. 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...