Cosme Ferreira
-
Total de itens
26 -
Registro em
-
Última visita
Posts postados por Cosme Ferreira
-
-
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
-
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
-
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.
-
O caracter % funciona como o * funcionava no DOS... e acho que "funciona" ainda no rWindows!
select * from clientes where nomeCliente like '%sil%'
-
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!
-
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
-
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
-
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
-
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!..
-
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...
-
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!
-
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!
-
Qual versão do Windows você está tentando instalar?
-
OBS.: se não me engano, a funcionalidade sp_send_dbmail está presente a partir do 2005.
Acabei de pesquisar e sua informação realmente procede Fulvio. Está presente à partir da versão 2005.
-
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.
-
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.
-
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(); } } }
-
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.
-
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.
-
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.
-
Não seria mais fácil uma replicação entre os bancos?
Mais garantido hein....(odeio trigger).... lol
-
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
-
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
-
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! :)
Update + Inner Join
em SQL Server
Postado
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. ;)