Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quarta-feira, 14 de dezembro de 2011

Word e Excel - Modo de Exibição Protegido


Modo de Exibição Protegido
No MS Office 2010, ao abri um arquivo no formato Word ou Excel vindo anexado de um e-mail, internet ou rede, aparece a mensagem “Modo de Exibição Protegido”, como na imagem abaixo.
Para desabilitar essa mensagem no Word ou Excel, pasta ir ao menu Arquivo\Opções
Na tena de Opões, vá ao menu “Central de Confiabilidade”

Na tela da central de confiabilidade, vá ao menu “Modo de exibição protegido”

Basta desmarcarmo as caixas de seleção para desabilitar a exibição da mensagem.

Anderson

segunda-feira, 12 de dezembro de 2011

Mapeando Dados Oracle para SQL Server

Mapeamento de tipo de dados para Publicadores Oracle

SQL Server 2008 R2
Tipos de dados de Oracle e tipos de dados de MicrosoftSQL Server nem sempre correspondem exatamente. Onde possível, o tipo de dados correspondente é selecionado automaticamente ao publicar uma tabela de Oracle. Em casos em que o mapeamento de um único tipo de dados não é claro, mapeamentos alternativos de tipo de dados são fornecidos. Para obter informações sobre como selecionar mapeamentos alternativos, consulte "Especificando Mapeamentos Alternativos de Tipos de Dados”, mais adiante neste tópico.
A tabela a seguir mostra como os tipos de dados são mapeados por padrão entre o Oracle e o SQL Server quando os dados são movidos de um Publicador Oracle para o Distribuidor do SQL Server. A coluna de Alternativas indica se mapeamentos alternativos estão disponíveis.
Tipo de dados de OracleTipos de dados SQL ServerAlternativas
BFILEVARBINARY(MAX)Sim
BLOBVARBINARY(MAX)Sim
CHAR([1-2000])CHAR([1-2000])Sim
CLOBVARCHAR(MAX)Sim
DATEDATETIMESim
FLOATFLOATNão
FLOAT ([1-53])FLOAT ([1-53])Não
FLOAT ([54-126])FLOATNão
INTNUMERIC(38)Sim
INTERVALDATETIMESim
LONGVARCHAR(MAX)Sim
LONG RAWIMAGESim
NCHAR([1-1000])NCHAR([1-1000])Não
NCLOBNVARCHAR(MAX)Sim
NUMBERFLOATSim
NUMBER([1-38])NUMERIC([1-38])Não
NUMBER([0-38],[1-38])NUMERIC([0-38],[1-38])Sim
NVARCHAR2 ([1-2000])NVARCHAR([1-2000])Não
RAW ([1-2000])VARBINARY([1-2000])Não
REALFLOATNão
ROWIDCHAR([1-2000])Não
TIMESTAMPDATETIMESim
TIMESTAMP(0-7) DATETIMESim
TIMESTAMP(8-9) DATETIMESim
TIMESTAMP(0-7) WITH TIME ZONEVARCHAR(37)Sim
TIMESTAMP(8-9) WITH TIME ZONEVARCHAR(37)Não
TIMESTAMP(0-7) WITH LOCAL TIME ZONEVARCHAR(37)Sim
TIMESTAMP(8-9) WITH LOCAL TIME ZONEVARCHAR(37)Não
UROWIDCHAR(18)Não
VARCHAR2([1-4000])VARCHAR([1-4000])Sim
Pense nos seguintes problemas de tipo de dados ao replicar dados de um banco de dados de Oracle.

Tipos de dados sem suporte

Os seguintes tipos de dados não têm suporte; não podem ser replicadas as colunas que têm estes tipos:
  • Tipos de objeto
  • Tipos XML
  • Varrays
  • Tabelas aninhadas
  • Colunas que usam REF

O tipo de dados de DATE.

As datas no SQL Server vão de 1753 a.C. a 9999 d.C. enquanto as datas no Oracle vão de 4712 a.C. a 4712 d.C. Se uma coluna do tipo DATE contém valores que estão fora do intervalo do SQL Server, selecione um tipo de dados alternativo para a coluna, que é VARCHAR(19).

Tipos FLOAT e NUMBER

A escala e precisão especificadas durante o mapeamento de tipos de dados FLOAT e NUMBER dependem da escala e precisão especificadas para a coluna usando o tipo de dados no banco de dados do Oracle. A precisão é o número de dígitos em um número. A escala é o número de dígitos à direita da casa decimal em um número. Por exemplo, o número 123,45 tem uma precisão de 5 e uma escala de 2.
O Oracle permite números a serem definidos com a escala maior que a precisão, tal como NUMBER(4,5), mas o SQL Server requer que a precisão seja igual ou maior que a escala. Para garantir que não há truncamento de dados, se a escala for maior que a precisão no Publicador Oracle, a precisão é definida igual à escala quando o tipo de dados for mapeado: NUMBER (4,5) ele seria mapeado como NUMERIC (5,5).
Observação Observação
Se você não especificar a escala e a precisão para NUMBER, o SQL Server usa o padrão máximo de escala (8) e precisão (38). É recomendável que você defina uma escala e precisão específicas no Oracle para melhor armazenamento e desempenho quando os dados forem replicados.

Tipos de objeto grande

O Oracle suporta até 4 gigabytes (GB), enquanto que o SQL Server suporta até 2 GB. Dados replicados acima de 2 GB são truncados.
Se uma tabela de Oracle incluir uma coluna de BFILE, os dados para a coluna serão armazenados no sistema de arquivos. A conta do usuário administrativo da replicação deve receber acesso ao diretório no qual os dados estão armazenados usando a seguinte sintaxe:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
Para obter mais informações sobre tipos de objetos grandes, consulte a seção "Considerações sobre objetos grandes" em Considerações de design e limitações para Editores Oracle.
Tipicamente, o padrão de mapeamento de tipo de dados é apropriado, porém para muitos tipos de dados do Oracle, você pode selecionar um mapeamento de tipo de dados a partir de um conjunto de mapeamentos alternativos, ao invés de usar o padrão. Há dois modos para especificar os mapeamentos alternativos:
  • Substitua o padrão em uma base por artigo usando procedimentos armazenados ou o Assistente para Nova Publicação .
  • Globalmente altere o padrão para todos os artigos futuros usando procedimentos armazenados (não são alterados os padrões para os artigos existentes).
Para especificar mapeamentos alternativos de tipo de dados

Oracle - Trabalhando com datas

SELECT SYSDATE DATA_ATUAL,
ADD_MONTHS(SYSDATE,-1) MENOS_UM_MES,
ADD_MONTHS(SYSDATE,1) MAIS_UM_MES,
LAST_DAY(SYSDATE) ULTIMO_DIA_MES,
TRUNC(SYSDATE,"MONTH") PRIMEIRO_DIA_MES,
MONTHS_BETWEEN(SYSDATE,"01-JAN-2001") QTD_MES,
FLOOR(MONTHS_BETWEEN(SYSDATE,"01-JAN-2001")) ARREDONDA_ABAIXO,
CEIL(MONTHS_BETWEEN(SYSDATE,"01-JAN-2001")) ARREDONDA_ACIMA,
ABS(MONTHS_BETWEEN(SYSDATE,"01-JAN-2001")) VALOR_ABSOLUTO,
ROUND((MONTHS_BETWEEN(SYSDATE,"01-JAN-2001")),2) ARREDONDA,
TRUNC(SYSDATE,"year") PRIMEIRO_DIA_ANO,
to_char(SYSDATE,"dd " DE " FMMONTH " DE " YYYY","nls_date_language=portuguese") DIAMES_EXTENSO,
to_char(SYSDATE,"FMMONTH " DE " YYYY","nls_date_language=portuguese") MES_EXTENSO,
TO_CHAR(SYSDATE,"HH24:MI") HORA_MINUTO,
to_char(sysdate,"FMMonth","nls_date_language=portuguese") mes_corrente,
to_date(lpad(to_char(1234),4,"0"),"hh24mi") dias_data,
Floor(floor(months_between(SYSDATE,SYSDATE)) / 12) IDADE,
decode(TO_NUMBER(TO_CHAR(SYSDATE,"D")),2,"segunda-feira",3,"terça-feira",4,"quarta-feira",
5,"quinta-feira",6,"sexta-feira",7,"sabado",1,"domingo") dia_da_semana
FROM DUAL

fonte: http://www.linhadecodigo.com.br/Dica.aspx?id=1292

SQL Server - Views Indexadas

Melhorando desempenho de consultas utilizando Views Indexadas

O artigo tem o objetivo de ensinar a utilização e criação de Views Indexadas, mostrando a melhora de desempenho ao utilizá-la.


O artigo tem o objetivo de ensinar a utilização e criação de Views Indexadas, mostrando a melhora de desempenho ao utilizá-la. Para conseguir exemplificar com mais precisão, mostrarei os conceitos de utilização e criação de Views e Index independentemente um recurso do outro. Nos exemplos deste artigo, utilizaremos o banco AdventureWorks, que vem com o banco de exemplo do SQL Server 2005.
Aconselho fortemente que você pesquise no Books Online sobre a criação e uso de sintaxe de Views e Indexes. No artigo vou apresentar a melhora no desempenho e não sua sintaxe. No Books Online você irá encontrar um material rico e completo sobre estes recursos.
Entendendo o que é uma View
A criação de instruções de consulta é na maioria dos casos simples, mas quando repetidos diversas vezes os mesmos códigos, pode-se começar a ficar cansativa a sua criação.  Para armazenar estas consultas em banco, utiliza-se um recurso já antigo de bancos de dados chamado View. Uma View é uma representação virtual de uma tabela, e pode conter colunas de uma ou varias tabelas físicas ou até mesmo de outras Views. Na maioria das vezes, as Views não armazenam os dados em banco, elas consultam os dados que foram selecionados em suas tabelas de origem. É possível utilizar uma View em qualquer lugar onde se possa utilizar uma tabela.
Vamos criar uma View de exemplo, consultando as tabelas Product e ProductModel do banco AdventureWorks.
CREATE VIEW vw_ProdutoDescricao WITH SCHEMABINDING AS
SELECT P.ProductID Codigo, P.Name Descricao, M.Name Produto
FROM Production.Product P INNER JOIN
      Production.ProductModel M
  ON P.ProductModelID = M.ProductModelID
Esta View irá retornar os dados relacionados entre as duas tabelas, e como não foi especificado nenhum Schema e neste caso estou conectado ao banco como usuário SA(System Administrator), a View irá assumir que o Schema é o do DBO.
Abaixo estão as sessões de Views do banco AdventureWorks, que exibe onde ficam armazenados todos objetos Views deste banco. Repare que na imagem da esquerda exibe o banco sem a View que criamos, e na imagem da direita, já apresenta a View criada.
Para ativar o retorno das estatísticas de IO (Input/Output), e solicitar que seja exibido na aba de Messages não somente a quantidade de linhas que foram retornadas, mas também quais tabelas foram acessadas e quantas leituras lógicas (Logical Reads) foram necessárias em cada tabela para conseguir atingir o resultado solicitado, devemos executar o código abaixo:
SET STATISTICS IO ON
Para executar a consulta que acabamos de criar, podemos chamar a View vw_ProdutoDescricao, fazendo um SELECT simples nela, como se fosse o de uma tabela.
SELECT * FROM vw_ProdutoDescricao
Repare que ao executar o SELECT na View, é apresentado o mesmo resultado da execução do SELECT nas tabelas que foram utilizadas em sua criação.
Pelo fato das estatísticas de IO estarem ativadas, o resultado é semelhante a este apresentado:
(295 row(s) affected)
Table "Worktable". Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table "Product". Scan count 1, logical reads 15, physical reads 1, read-ahead reads 14, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table "ProductModel". Scan count 1, logical reads 2, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
 
Neste exemplo são poucos dados que são armazenados na tabela de exemplo, mas já é possível visualizar que foram lidas 17 páginas de arquivos. Sendo 15 páginas da tabela Products e 2 páginas da tabela ProductModel.
O que é um Index?
O SQL Server é um banco de dados relacional, e em bancos de dados relacionais existe um recurso chamado Index (Indexação). O Index permite que o banco de dados acesse rapidamente linhas em uma tabela baseando-se nos valores de uma ou varias colunas. Para criar Index não se deve somente pensar em código T-SQL, Index é mais complicado do que isso. Criar um Index depende de estudo e análise das estruturas das tabelas para conseguir um resultado satisfatório. Caso você crie um Index em uma tabela que sofra muitas inserções de dados, o tempo para recalcular o Index pode ser mais demorado que se fosse executada uma consulta diretamente na tabela origem sem o Index.
Existem dois tips de Index, o Index Clustered e o Index Non-Clustered. O Index Clustered irá determinar a ordem física de armazenamento das linhas na tabela, diferente do Index Non-Clustered, que é um objeto dentro do banco de dados que aponta para uma linha dentro de uma tabela, mas não especifica como estas linhas devem estar armazenadas. Partindo do mesmo princípio da criação de Chaves Simples e Chaves Compostas em tabelas, os Index também podem ser simples ou composto. O Index simples é baseado em apenas uma coluna, enquanto o Index composto é baseado em duas ou mais colunas de uma tabela ou View.
A criação de um Index na View que criamos anteriormente será essencial para comprovar o que estou propondo no artigo. A melhora no desempenho.
CREATE UNIQUE CLUSTERED INDEX idx_ProdutoDescricao ON
vw_ProdutoDescricao(Codigo ASC) 
Após a criação, o Index vai ficar armazenado na sessão de Index da View de exemplo. Para visualizar os Index criados em cada View, expanda as opções da View criada anteriormente e em seguida expanda as opções relacionadas aos indexes. Este procedimento pode ser realizado tanto para Views quanto para tabelas.
Repare que o Index com o nome que criamos está presente nesta sessão.
Como funcionam Views Indexadas.
A possibilidade de criação de Index em Views, foi desenvolvida para a versão 2000 do SQL Server e melhorada para a versão 2005. Ao indexar uma View, os dados são armazenados em uma tabela virtual e são atualizados sempre que os dados de suas tabelas originais são alterados. Em vários casos, este recurso pode melhorar o desempenho, visto que os dados não precisarão ser “recalculados” sempre que forem consultados. As Views indexadas são recomendadas, quando os dados das tabelas que são utilizadas nas Views não sofrerem muitas alterações. No caso de existirem muitas alterações nos dados das tabelas, o tempo de processamento para montar o Index da View pode ser maior que o tempo para fazer a consulta sem Index às tabelas.
Executando a mesma consulta que foi realizada à View no exemplo anterior, e mantendo as estatísticas de IO ativas, é possível comparar a quantidade de páginas que foram utilizadas para atingir o mesmo retorno. Repare que o SQL Server interpreta a View como sendo uma tabela do banco de dados, e faz leitura em 6 páginas para retornar os dados cadastrados.
(295 row(s) affected)
Table "vw_ProdutoDescricao". Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
 
A velocidade de retorno de uma consulta é proporcional à quantidade de páginas que o SQL Server 2005 necessita ler para conseguir o resultado. Quanto mais páginas forem lidas para mostrar o resultado de uma consulta, mais tempo vai levar para esta consulta ser completada.
Toda vez que o SQL Server 2005 realiza uma consulta, ele gera um plano de execução. Este plano de execução é armazenado em memória por um determinado tempo, e se for realizada esta mesma consulta enquanto o plano ainda existir, o SQL Server 2005 vai realizar a consulta de forma mais rápida. Para provar o que estou escrevendo, execute a instrução SELECT que originou a View (não é a execução da View, é a execução do SELECT que está dentro dela), esta instrução fará consulta à tabela vw_ProdutoDescricao, e vai consultar somente 6 páginas.
SELECT P.ProductID Codigo, P.Name Descricao, M.Name Produto
FROM Production.Product P INNER JOIN
      Production.ProductModel M
  ON P.ProductModelID = M.ProductModelID
No resultado da consulta, na sessão de Messages é apresentada a prova disso.
 
(295 row(s) affected)
Table "vw_ProdutoDescricao". Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
                                 
Neste artigo fico por aqui, apresentando a melhoria de performance ao utilizar Views indexadas. Espero que este artigo auxilie os desenvolvedores que necessitam melhorar o desempenho de consultas demoradas. Os dados apresentados são poucos, mas mesmo assim a melhora foi superior a 50%. Existem casos em que a melhora chega a ser de 90% ou mais.

fonte: http://www.linhadecodigo.com/ArtigoImpressao.aspx?id=1308

Oracle - Funções

Funções de valores simples:

ABS(n)= Devolve o valor absoluto de (n).
CEIL(n)=Obtém o valor inteiro imediatamente superior ou igual a "n".
FLOOT(n) = Devolve o valor inteiro imediatamente inferior ou igual a "n".
MOD (m, n)= Devolve o resto resultante de dividir "m" entre "n".
NVL (valor, expressão)= Substitui um valor nulo por outro valor.
POWER (m, exponente)= Calcula a potência de um número.
ROUND (numero [, m])= Arredonda números com o número de dígitos de precisão indicados.
SIGN (valor)= Indica o signo do "valor".
SQRT(n)= Devolve a raiz quadrada de "n".
TRUNC (numero, [m])= Trunca números para que tenham uma certa quantidade de dígitos de precisão.
VAIRANCE (valor)= Devolve a média de um conjunto de valores.

Funções de grupos de valores:

AVG(n)= Calcula o valor médio de "n" ignorando os valores nulos.
COUNT (* | Expressão)= Conta o número de vezes que a expressão avalia algum dado com valor não nulo. A opção "*" conta todas as filas selecionadas.
MAX (expressão)= Calcula o máximo.
MIN (expressão)= Calcula o mínimo.
SUM (expressão)= Obtém a soma dos valores da expressão.
GREATEST (valor1, valor2…)= Obtém o maior valor da lista.
LEAST (valor1, valor2…)= Obtém o menor valor da lista.

Funções que devolvem valores de caracteres:

CHR(n) = Devolve o caractere cujo valor em binário é equivalente a "n".
CONCAT (cad1, cad2)= Devolve "cad1" concatenada com "cad2".
LOWER (cad)= Devolve a cadeia "cad" em minúsculas.
UPPER (cad)= Devolve a cadeia "cad" em maiúsculas.
INITCAP (cad)= Converte a cadeia "cad" a tipo título.
LPAD (cad1, n[,cad2])= Adiciona caracteres à esquerda da cadeia até que tenha uma certa longitude.
RPAD (cad1, n[,cad2])= Adiciona caracteres à direita até que tenha uma certa longitude.
LTRIM (cad [,set])= Suprime um conjunto de caracteres à esquerda da cadeia.
RTRIM (cad [,set])= Suprime um conjunto de caracteres à direita da cadeia.
REPLACE (cad, cadeia_busca [, cadeia_substitucao])= Substitui um caractere ou caracteres de uma cadeia com 0 ou mais caracteres.
SUBSTR (cad, m [,n])= Obtém parte de uma cadeia.
TRANSLATE (cad1, cad2, cad3)= Converte caracteres de uma cadeia em caracteres diferentes, segundo um plano de substituição marcado pelo usuário.

Funções que devolvem valores numéricos:

ASCII(cad)= Devolve o valor ASCII da primeira letra da cadeia "cad".
INSTR (cad1, cad2 [, comeco [,m]])= Permite uma busca de um conjunto de caracteres em uma cadeia, mas não suprime nenhum caractere depois.
LENGTH (cad)= Devolve o número de caracteres de cad.

Funções para o manejo de datas:

SYSDATE=  Devolve a data do sistema.
ADD_MONTHS (data, n)= Devolve a data "data" incrementada em "n" meses.
LASTDAY (data)= Devolve a data do último dia do mês que contém "data".
MONTHS_BETWEEN (data1, data2)= Devolve a diferença em meses entre as datas "data1" e "data2".
NEXT_DAY (data, cad)= Devolve a data do primeiro dia da semana indicado por "cad" depois da data indicada por "data".

Funções de conversão:

TO_CHAR= Transforma um tipo DATE ou NUMBER em uma cadeia de caracteres.
TO_DATE= Transforma um tipo NUMBER ou CHAR em DATE.
TO_NUMBER= Transforma uma cadeia de caracteres em NUMBER.

fonte: http://www.criarweb.com/artigos/756.php

SQL Server - Trabalhando com data


First Day of Month


select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
 

First Day of Last Month


select DATEADD(mm, DATEDIFF(mm,0,DATEADD(mm,-1,getdate())), 0)
 

Monday of the Current Week


select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
 

Sudday of the Current Week


set DATEFIRST 1

select DATEADD(dd, 1 - DATEPART(dw, getdate()), getdate())
 

First Day of the Year


select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
 

First Day of the Quarter


select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
 

Midnight for the Current Day


select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
 

Last Day of Prior Month


select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()  ), 0))
 

Last Day of Prior Year


select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()  ), 0))
 

Last Day of Current Month


select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()  )+1, 0))
 

Last Day of Current Year


select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()  )+1, 0))
 

First Monday of the Month


select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 0) 
 
 
DATEPART
Função usada para obter uma determinada parte de uma data como por exemplo o ano, mês, dia, hora, minuto, segundo, etc. Para utilizá-la pede-se dois parâmetros sendo o primeiro a parte da data e o segundo a data propriamente dita, repare que no exemplo abaixo usei no segundo parâmetro da função datepart a função getdate() usada para retornar a data atual do servidor.
DatePart
DATEDIFF
Função usada para obter a diferença de anos, meses, dias, horas, minutos, segundos, dentre outros entre duas datas. Para utilizá-la pede-se três parâmetros sendo o primeiro a parte da data o segundo a data inicial e o terceiro a data final, repare que no exemplo abaixo usei no segundo parâmetro da função datepart a função getdate() usada para retornar a data atual do servidor.
DateDiff
DATEADD
Função usada para adicionar anos, meses, dias, horas, minutos, segundos, dentre outros a uma data. Para utilizá-la pede-se três parâmetros sendo o primeiro a parte da data o segundo o valor ao qual será adicionado e o terceiro a data propriamente dita, repare que no exemplo abaixo usei no segundo parâmetro da função datepart a função getdate() usada para retornar a data atual do servidor.
DateAdd
CONVERT
No contexto do artigo esta função é usada para converter um campo ou variável do tipo data para uma string baseado em uma norma ou padrão do SQL Server. Para utilizá-la pedem-se dois parâmetros sendo o primeiro o tipo ao qual o dado será convertido que no nosso caso é um varchar, o segundo parâmetro é a data na qual será convertida e o terceiro parâmetro é a norma ou padrão do SQL Server listado abaixo, repare que no exemplo abaixo usei no segundo parâmetro da função datepart a função getdate() usada para retornar a data atual do servidor.
Abaixo listei todas as normas/padrões do SQL Server a questão agora é usar a que se encaixa melhor para cada tipo de situação.
Convert
fontes: 
 
http://shanecooper.net/cooldatefunctions.htm 
 
http://www.devmedia.com.br/articles/viewcomp.asp?comp=14015 

SQL Server - Data por Extenso – DateName

Script para retornar uma data por extenso.
 
SET LANGUAGE Português
 
SELECT DATENAME(weekday, GetDate()) + ‘, ‘   +
       DATENAME(day, GetDate())     + ‘ de ‘ +
       DATENAME(month, GetDate())   + ‘ de ‘ +
       DATENAME(year, GetDate())
 
 
Lembrar de utilizar o SET LANGUAGE para retornar a data no idioma desejado, para verificar o idioma padrão de sua sessão execute “DBCC UserOptions”
 
Para visualizar qual é o nome dos idiomas existentes no SQL verifique na coluna name da tabela sysLanguages.
select * from master.dbo.syslanguages
 
Obs.: Evite usar SET LANGUAGE dentro de procedures pois isso irá causar RECOMPILE.

fonte: http://blogfabiano.com/2008/04/24/data-por-extenso-datename/
Related Posts Plugin for WordPress, Blogger...