
jothaz
Membros-
Total de itens
430 -
Registro em
-
Última visita
Tudo que jothaz postou
-
Camaradas, Exemplo de WHERE dinâmico - sem utilização de EXEC ou CASE A stored procedure a seguir efetua uma consulta em uma tabela de CLIENTES utilizando como critério os campos: UF, CIDADE e BAIRRO. A particularidade desta stored procedure é que ele é capaz efetuar a consulta de maneira dinâmica. Ou seja a stored procedure receberá: 3 parâmetros EXEMPLO_WHERE_DINAMICO('UF','CIDADE','BAIRRO') 2 parâmetros EXEMPLO_WHERE_DINAMICO('UF','CIDADE') 1 parâmetro EXEMPLO_WHERE_DINAMICO('UF') NENHUM parâmetro EXEMPLO_WHERE_DINAMICO() E efetuará o filtro (WHERE) dinamicamente. Segue código da stored procedure: -- --- INICIO DA PROCEDURE --------------------------------------------------------------------------------- -- CREATE PROC EXEMPLO_WHERE_DINAMICO( @UF CHAR(2) = NULL, @CIDADE VARCHAR(30) = NULL, @BAIRRO VARCHAR(30) = NULL ) AS SELECT * FROM CLIENTES WHERE -- FILTROS OPCIONAIS ---------------------------------------------------------------------------------------- (@UF IS NULL OR UFA = @UF) AND (@CIDADE IS NULL OR CIDADE = @CIDADE) AND (@BAIRRO IS NULL OR BAIRRO = @BAIRRO) ORDER BY UF,CIDADE,BAIRRO Considerações finais: É sempre aconselhavel ser prudente no uso do OR pois normalmente afeta a performance. Alguns DBA´s consideram até uma heresia o seu uso! :o) Analise o plano de execução para avaliar como a expressão esta sendo processada. Por ele é possivél perceber o gargalos na execução de sua expressão. Fonte/Autor/link AUTOR: "Jothaz" e "Bruno" Dúvidas, criticas, contribuições, correções e adições serão bem vindas.
-
Camaradas, Neste tópico vamos aprender como manipular Data (DATETIME ou SMALLDATETIME) no SQL Server. Não é um texto dogmático nem com pretensão de esgotar o assunto. As dicas e exemplos postados aqui representam o meu aprendizado diário. Funcionam! Porém não são verdades absolutas. :blush: Sempre criar campos data com o formato DATETIME ou SMALLDATETIME. A diferença entre os dois tipos podem ser detalhadas nos Books Online. O exemplo a seguir mostra de forma simplificada como cada tipo atua: -- --Retorna Data do sistema completa: AAAA-MM-DD 00:00:00.000 SELECT CAST(GETDATE() AS DATETIME) -- --Retorna Data do sistema completa (com arredondamento): AAAA-MM-DD 00:00:00 SELECT CAST(GETDATE() AS SMALLDATETIME) -- -- Exemplos do Books Online -- --Retorna: 2000-05-08 12:35 SELECT CAST('2000-05-08 12:35:29.998' AS SMALLDATETIME) SELECT CONVERT(SMALLDATETIME,'2000-05-08 12:35:29.998') -- --Retorna: 2000-05-08 12:36 SELECT CAST('2000-05-08 12:35:29.999' AS SMALLDATETIME) SELECT CONVERT(SMALLDATETIME,'2000-05-08 12:35:29.999') -- OBS: Notem que tanto a função CAST como CONVERT retorna o mesmo resultado. Não existem impedimentos para se gravar uma data em um campo VARCHAR e depois utilizar CAST ou CONVERT para manipulá-lo. Porém como o tipo VARCHAR não impõe CONTRAINT para validar uma data, facilidade nativa dos tipos DATETIME/SMALLDATETIME, pode permitir a entrada de uma data inválida. Assim sendo se a aplicação por algum problema passar uma data invalida o banco de dados gravará a data inválida sem retornar erro algum. É claro que a aplicação realmente dever consistir e formatar a data a ser envia para o banco. Porém definindo a data no formato correto esta consistência será garantida a nível de banco de dados, além da aplicação. No post: http://forum.imasters.com.br/index.php?showtopic=223962 este assunto é tratado com um exemplo real. Criando campos e variáveis do tipo data: --Criando variáveis locais do tipo data DECLARE @DT_INICIO DATETIME DECLARE @DT_INICIO SMALLDATETIME --Criando campos tipo data em tabela CREATE TABLE #TMP (NU_COD INT, DT_INICIO DATETIME) CREATE TABLE #TMP (NU_COD INT, DT_INICIO SMALLDATETIME) A forma como o banco de dados tratará/gravará/exibrá o campo data: -- -- Exemplos do Books Online SET DATEFORMAT mdy DECLARE @datevar datetime SET @datevar = '12/31/98' SELECT @datevar SET DATEFORMAT ydm SET @datevar = '98/31/12' SELECT @datevar SET DATEFORMAT ymd SET @datevar = '98/12/31' SELECT @datevar No post: http://forum.imasters.com.br/index.php?showtopic=223962 nosso companheiro eriva_br dá uma aula sobre o assunto. Vale uma conferida! Inserindo registros em campos datas CREATE TABLE #ATIVIDADES (DESCRICAO_ATIVIDADE VARCHAR(30),DT_INI DATETIME, DT_FIM DATETIME) --Inserindo DT_INI no formato DD/MM/AAAA com a hora --e DT_FIM no formato DD/MM/AAAA sem a hora INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Requisitos','01/01/2005 00:00:00','01/01/2006') --Inserindo DT_INI no formato AAAA/MM/DD sem a hora --e DT_FIM no formato DD/MM/AAAA sem a hora INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Modelagem','2006/01/02 ','05/07/2006') --Inserindo DT_INI no formato AAAA/DD/MM com a hora --e DT_FIM no formato AAAA/DD/MM com a hora INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Implementação','2006/07/06 00:00:00','2007/04/25 00:00:00') Como pode ser visto as datas podem ser inseridas de várias formas com hora ou não. Caso a hora não seja informada será usada 00:00:00 como padrão. Aqui onde trabalhamos normalmente enviamos a data para o SQL no formato AAAA/MM/DD pois neste formato grava-se a data em qualquer banco de dados ANSI. Converter, mascarar, recuperar informações campos data: Utilizando a função CONVERT pode-se retornar o conteúdo do campo data das seguintes formas: SELECT CONVERT(VARCHAR(12),GETDATE(),101) AS '101', CONVERT(VARCHAR(12),GETDATE(),102) AS '102', CONVERT(VARCHAR(12),GETDATE(),103) AS '103', CONVERT(VARCHAR(12),GETDATE(),104) AS '104', CONVERT(VARCHAR(12),GETDATE(),105) AS '105', CONVERT(VARCHAR(12),GETDATE(),106) AS '106', CONVERT(VARCHAR(12),GETDATE(),107) AS '107', CONVERT(VARCHAR(12),GETDATE(),108) AS '108', CONVERT(VARCHAR(12),GETDATE(),109) AS '109', CONVERT(VARCHAR(12),GETDATE(),110) AS '110', CONVERT(VARCHAR(12),GETDATE(),111) AS '111', CONVERT(VARCHAR(12),GETDATE(),112) AS '112', CONVERT(VARCHAR(12),GETDATE(),113) AS '113', CONVERT(VARCHAR(12),GETDATE(),114) AS '114', CONVERT(VARCHAR(12),GETDATE(),120) AS '120', CONVERT(VARCHAR(12),GETDATE(),121) AS '121' A função CONVERT além de devolver a data formatada, ou parte da mesma, permite efetuar a conversão do campo data para outros formatos. Nesta caso pode-se utilizar a funçao CAST para obter-se o mesmo resultado. Para concatenar um texto com uma data veja os exemplos: SELECT CONVERT(VARCHAR(10),GETDATE(),103) + ' é a data de hoje' SELECT CAST(GETDATE() AS VARCHAR(10)) + ' é a data de hoje' Normalmente utilizo o CONVERT e não o CAST, mas cada caso é um caso. Obs: Muita atenção no resultado da conversão de datas para outros formatos. As vezes não ocorre a concatenação e sim uma soma, principalmente na conversões para formato numérico. Manipulando partes de data: SELECT YEAR(GETDATE()) AS ANO, MONTH(GETDATE()) AS MES, DAY(GETDATE()) AS DIA -- --Utlizando DATEPART que retorna um INTEIRO contendo informações --sobre o campo data SELECT DATEPART(YEAR, GETDATE()) AS ANO, DATEPART(MONTH, GETDATE()) AS MES, DATEPART(DAY, GETDATE()) AS DIA, DATEPART(DAYOFYEAR, GETDATE()) AS DIA_ANO, DATEPART(WEEK, GETDATE()) AS SEMANA, DATEPART(HOUR, GETDATE()) AS HORA, DATEPART(MINUTE, GETDATE()) AS MINUTO -- --Utlizando DATENAME que retorna uma STRING(caracter) contendo informações --sobre o campo data SELECT DATENAME (YEAR, GETDATE()) AS ANO, DATENAME (MONTH, GETDATE()) AS MES, DATENAME (DAY, GETDATE()) AS DIA, DATENAME (DAYOFYEAR, GETDATE()) AS DIA_ANO, DATENAME (WEEK, GETDATE()) AS SEMANA, DATENAME (HOUR, GETDATE()) AS HORA, DATENAME (MINUTE, GETDATE()) AS MINUTO Mais exemplos e particularidades de cada função pró-atividade e Books Online(procure por Date and Time Functions). :assobiando: Datas e matemática. É possível? :devil: -- --DATEDIFF retorna um INTEITO como resultado de operações --entre dua datas DECLARE @DT_EXEMPLO DATETIME SET @DT_EXEMPLO = '1966/01/01' SELECT DATEDIFF(YEAR, @DT_EXEMPLO , GETDATE()) AS ANO, DATEDIFF(MONTH, @DT_EXEMPLO , GETDATE()) AS MES, DATEDIFF(DAY, @DT_EXEMPLO , GETDATE()) AS DIAS -- --DATEADD retorna um DATETIME como resultado de adição entre datas -- SELECT DATEADD(DAY, -10 , GETDATE()) AS DATA_ATUAL_MENOS_10_DIAS, DATEADD(DAY, 10 , GETDATE()) AS DATA_ATUAL_MAIS_10_DIAS, DATEADD(YEAR, -10 , GETDATE()) AS DATA_ATUAL_MENOS_10_ANOS, DATEADD(YEAR, 10 , GETDATE()) AS DATA_ATUAL_MAIS_10_ANOS De novo, novamente! Mais exemplos e particularidades de cada função pró-atividade e Books Online(procure por Date and Time Functions). :assobiando: O exemplo a seguir cria uma tabela temporária e executa vários select´s utilizando campos tipo data: CREATE TABLE #ATIVIDADES (DESCRICAO_ATIVIDADE VARCHAR(30),DT_INI DATETIME, DT_FIM DATETIME) INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Requisitos','2005/01/01 00:00:00','2006/01/01 00:00:00') INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Modelagem','2006/01/02 00:00:00','2006/07/05 00:00:00') INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Implementação','2006/07/06 00:00:00','2007/04/25 00:00:00') INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Testes','2007/04/26 00:00:00','2007/06/20 00:00:00') INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Homoçogação','2007/06/21 00:00:00','2007/07/28 00:00:00') INSERT INTO #ATIVIDADES (DESCRICAO_ATIVIDADE,DT_INI,DT_FIM) VALUES ('Implantação','2007/07/28 00:00:00','2007/11/25 00:00:00') -- -- Calculando a diferença entre a DT_INI e DT_FIM utilizando função DATADIFF -- PRINT 'DT_FIM - DT_INI:' SELECT CONVERT(VARCHAR(10),DT_INI,103) AS DT_INI, CONVERT(VARCHAR(10),DT_FIM,103) AS DT_FIM, DATEDIFF(MONTH,DT_INI,DT_FIM) AS DIF_MES, DATEDIFF(DAY,DT_INI,DT_FIM) AS DIF_DIAS, DATEDIFF(WEEK,DT_INI,DT_FIM) AS DIF_SEMANA, DATEDIFF(HOUR,DT_INI,DT_FIM) AS DIF_HORA, DATEDIFF(MINUTE,DT_INI,DT_FIM) AS DIF_MINUTOS FROM #ATIVIDADES -- -- Diminui 2 dias e soma 2 dias na DT_INI -- PRINT 'SUBTRAI/SOMA DIAS EM DATA' SELECT CONVERT(VARCHAR(10),DT_INI,103) AS DT_INI, CONVERT(VARCHAR(10),DT_FIM,103) AS DT_FIM, CONVERT(VARCHAR(10),DATEADD(DAY,-2,DT_FIM),103) AS DOIS_DIAS_ANTES, CONVERT(VARCHAR(10),DATEADD(DAY,2,DT_FIM),103) AS DOIS_DIAS_DEPOIS FROM #ATIVIDADES -- --USANDO CASE NAS EXPRESSÕES: -- PRINT 'Data Atual (GETDATE()) - DT_FIM: ' SELECT CONVERT(VARCHAR(10),DT_INI,103) AS DT_INI, CONVERT(VARCHAR(10),DT_FIM,103) AS DT_FIM, DATEDIFF(DAY,DT_INI,DT_FIM) AS 'DT_FIM-DT_INI', DATEDIFF(DAY,DT_INI,GETDATE()) AS 'GETDATE()-DT_INI', DATEDIFF(DAY,DT_FIM,GETDATE()) AS 'GETDATE()-DT_FIM', CASE WHEN GETDATE() BETWEEN DT_INI AND DT_FIM THEN 'Iniciado' WHEN (DATEDIFF(DAY,DT_FIM,GETDATE())) < 1 THEN 'A iniciar' ELSE 'Finalizado' END AS DE_SITUACAO, CASE WHEN (DATEDIFF(DAY,DT_FIM,GETDATE())) > 0 THEN '100 %' ELSE CASE WHEN CONVERT(VARCHAR(15),100 - ((100 * (DATEDIFF(DAY,DT_FIM,GETDATE()) * -1) ) / DATEDIFF(DAY,DT_INI,DT_FIM))) < 0 THEN '0 %' ELSE CONVERT(VARCHAR(15),100 - ((100 * (DATEDIFF(DAY,DT_FIM,GETDATE()) * -1) ) / DATEDIFF(DAY,DT_INI,DT_FIM))) + '%' END END AS PERC_REAL FROM #ATIVIDADES DROP TABLE #ATIVIDADES Considerações:Esta é a primeira versão prometo efetuar as alterações e correções necessárias bem como incluir mais exemplos e comentários.Peço a colaboração de todos para melhorarmos este post.AUTOR: "Jothaz" - o material deste post foi compilado a partir dos Books Online, material do fórum imasters, de outros fóruns, da internet e das surras que eu já levei por causa das danadas das datas :P . Se por acaso alguém achar que o material, ou parte dele, é de outra autoria é só se manifestar (o post esta aberto) que após a verificação, os créditos serão adicionados. Dúvidas, criticas, contribuições, correções e adições serão bem vindas.
-
Tanta alterar: E.E5_DATA >= '20080101' AND E.E5_DATA <= '20080131' E.E5_DATA between '2008/01/01' AND '2008/01/31' Só mesmo um teste.
-
O q você pretende? Somar 2 no ano? Pode ser assim: declare @data datetime set @data = getdate() print year(@data) - 2 Mas por favro seja mais claro no que queres para facilitar.
-
Sou fraquinho em SQL mas aco que assim rola: declare @TABA table (codigo int, valor_A int) insert into @TABA (codigo , valor_A ) values (1,100) insert into @TABA (codigo , valor_A ) values (2,197) insert into @TABA (codigo , valor_A ) values (3,200) insert into @TABA (codigo , valor_A ) values (4,500) insert into @TABA (codigo , valor_A ) values (5,470) declare @TABB table (codigo int, valor_B int) insert into @TABB (codigo , valor_B ) values (1,440) insert into @TABB (codigo , valor_B ) values (3,240) insert into @TABB (codigo , valor_B ) values (3,442) insert into @TABB (codigo , valor_B ) values (5,222) declare @TABC table (codigo int, valor_C int) insert into @TABC (codigo , valor_C ) values (1,310) insert into @TABC (codigo , valor_C ) values (2,276) declare @TABD table (codigo int, valor_A int, valor_B int , valor_C int) insert into @TABD (codigo) select codigo from @TABA union select codigo from @TABB union select codigo from @TABC order by codigo update @TABD set valor_A = a.valor_A from @TABD d, @TABA a where a.codigo = d.codigo update @TABD set valor_B = b.valor_B from @TABD d, @TABB b where b.codigo = d.codigo update @TABD set valor_C = c.valor_C from @TABD d, @TABC C where c.codigo = d.codigo select * from @tabD Agora vamos aguardar os amigos do forúm pois podem sugerir algo mais elegante. Agora só mesmo um toque evite abrir post duplicados porque dificulta a ajuda e a pesquisa psoterior. quando o poeste estives errado posta a correção mas não abra outro post. Não sou moderador nem estou pagando sapo é só uma dica.
-
Bem lembrado KaKarotto com sempre. Agora deve-se levar em consideração que na hora da gravação deve-se retirara as ' (plics) poi ssenão dá erro na expressão sql.
-
sinceramente não entedi os seu dados mas o UNION funciona assim: select lista de campos from sua_tabela_A UNION ALL select lista de campos from sua_tabela_B UNION ALL select lista de campos from sua_tabela_C Order by lista de campos Outra forma seria criar um tabela D (stemporaria ou não) e dar insert nela: insert lista de campos into tabela_D select lista de campos from sua_tabela_A insert lista de campos into tabela_D select lista de campos from sua_tabela_B insert lista de campos into tabela_D select lista de campos from sua_tabela_C
-
Dá um replace de: 'GUARANI D'OESTE' para 'GUARANI D"OESTE' pois terá problemas na persitênsia da informação no banco de dados.
-
Função De Máscarar Data Só Funciona No Ie E No Ff Não.
uma questão respondeu jothaz em Ajax, JavaScript, XML, DOM
As setas direcionais tb funcionam? -
O termo correto é URLs amigáveis ou url friendly. Eu trabalho com uma ferramenta para administrar portais o Vignette que já cria as URL´s assim. Dê um olhada em: http://forum.imasters.uol.com.br/index.php?showtopic=203965 Ou http://brunotorres.net/urls
-
Não seria o caso de usar uma function?
-
Talvez esta artigo lhe ajude: http://forum.imasters.uol.com.br/index.php?showtopic=220834
-
Dê uma pesquisa do boosk online em Collations.
-
você já tento alterar o for assim: function scrollit(){ for (I=1; I<=2500; I++){ I1.scroll(1,I) } } Se ficar lento aumenta de 25000 pra 50000.
-
(Resolvido) JavaScript - Campos(input) do Form num Array?
uma questão respondeu jothaz em Ajax, JavaScript, XML, DOM
Cara sou fraquinho em Javascript mas veja este exemplo (não testei por isso pode conter erro, mas já lhe uma ideia): <script> function t(){ var qtde = campo.length; for (i=0;qtde;++){ alert(campo[i].value); { } </script> <input id="campo" name="campo" value="1"> <input id="campo" name="campo" value="2"> <input id="campo" name="campo" value="3"> <input id="campo" name="campo" value="4"> <input type="button" id="cmd" name="cmd" value="ok" onclick="java script: t();"> O criar os input´s com o mesmo nome assim: <input id="campo" name="campo" value="1"> <input id="campo" name="campo" value="2"> se utilizar o mesmo nome/id os controles são criados como arrays. Dêum olhada aqui: http://forum.imasters.uol.com.br/index.php?showtopic=225297 que talvez possa ajudar. -
Não sei se é a melhor forma, pois não conheço muito de javascritp, mas tenta assim: <script> function isset(o){ var campo = eval('document.getElementById("' + o + '")'); if (campo != undefined && campo != null){ alert("objeto existe"); }else{ alert("objeto não existe"); } } </script> <input type="button" id="cmd" name="cmd" onclick="java script: isset('meu_obj');"> Passe o nome do controle entre '' como string e use o eval para trasnformar em objeto.
-
Só esclarece uma parada se a lista fosse a sequinte: 714 717 743 ---> esta é a idade que deveria ser selecionada porque tá mais próxima de 750, como fazer isso, tem como?! 757 777 790 792 798 Qual deveria ser retorado 743 ou 757? Ou as duas? Ou a mais perto e menor? Ou a mais perto e maior?
-
Não saco nada de MySql mas pelo q foi postado o erro e na sintaxe da sua query. Tenta rodá-lo no cliente do Mysql e verifique se roda corretamente. Faça só um teste pois acho que no MySql deve-se finalizar as query´s com ; assim: strSQL = "SELECT * FROM usuarios order by Id_usuarios; "
-
Não conheço muito de Postgresql mas têm uma leve noção de SQL e acho que com cursor e pegando cada letra do campo da para fazer o que a kethellen quer. Ou mesmo vai programação.
-
Qual versão estais a utilizar?
-
Com você esata campturando o event? Keydown ou Keypress? Sou leigo em JavaScript mas acho que no firefox o número retornado para backsapce e seta deirecionais é diferente do iexplore. Se não me engano (sou leigo no assunto): 8 (backspace) e 0 (seta direcionais, delete e tab) E outra coisa na chamada da função faça assim: onkeypress="return Numerico(event);" Se escrevi bobagem favor desconsiderar mas acho que pode dar um luz.
-
(Resolvido) JavaScript - Campos(input) do Form num Array?
uma questão respondeu jothaz em Ajax, JavaScript, XML, DOM
Só completando o questionamento da ninha andreia_sp: você que manipular este array´s em javascript ou numa linguagem? Se for linguagem qual você utilza? -
Select de mais de um número em uma mesma celula
pergunta respondeu ao (!_Odisséa_!) de jothaz em ASP
ahahahahahahahahahahahahahahahah Mas tome como um elogio e não algo depreciativo. quanto a sugerstão da modelagem acho a melhor pois normalizar é um boa prática. Seria possivel fazer uma gambi ou um RTA (recurso tecnologico alternativo - gambi) mas acho que traria mais transtornos que beneficios. E (!_Odisséa_!) qualquer duvida é só postar. -
Select de mais de um número em uma mesma celula
pergunta respondeu ao (!_Odisséa_!) de jothaz em ASP
entendi sim, mas sem problemas, nesse caso use o LIKE para comprar o campo numero com o campo texto... o like pega os registros "semelhantes", digamos que você tenha cadastrado que inox é 5 e o aluminio é 8 e açocarbono é 10, e na outra tb você coloca que a noticia x é referente ao metal 5, 8. Rode uma query com like prociurando por noticias que tenham referencia ao metal 5, pronto irá encontrar, ao metal, 8, irá encontrar tb, ao metal 5 e 8 irá encontrar tb, ao metal 10 não ira encontrar nada! sacou? a query com like tem essa sintaxe: ComandoSQL = "select * from noticias where id_metal LIKE '%" &metal& "%' " sacou? []'s Rafael Spilki Brother talvez a dica do Rafael (como sempre indefenestravel) pode resolver este problema. Sugiro que você tente efetuar uma modelagem desta forma (normalizada) onde existe um tabela associativa entre Metais e Noticias e depois utilizando o JOIN você recupera as informações. Tipo assim: Select * from MetaisNoticias mn, Metais m, Noticias n where mn.id = n.id_n and mn.id = m.id A modelagem ficaria assim: +-------------------+ | tabela Metais | +-----+-------------+ | id | metal | +-----+-------------+ | 1 | Aluminio | | 2 | Cobre | | 3 | Chumbo | +-----+-------------+ +------------------------- | MetaisNoticias +--------+---------------+ | id_n | id | | 1 | 1 | | 1 | 3 | | 2 | 2 | | 2 | 3 | +--------+---------------+ +------------------------- | Tabela Noticias +--------+-------------+-- | id_n | titulo | | 1 | Not 01 | | 2 | Not02 | +--------+-------------+ -
Engraçado fiz uma migração do Access (memo) para SQL Server (text) e foi tudo ok.