Postagens

Mostrando postagens com o rótulo MSSQL

Pegando informações de Sessão no Oracle e equivalente no MSSQL

Tem situações onde precisamos resgatar informações a respeito de nossa sessão no banco de dados, para uso em nossos programas, procedures, triggers, etc. Por vezes inclusive precisamos migrar alguma rotina de um banco para outro. Como de vez em quando preciso fazer isso, resolvi colocar aqui abaixo as equivalências de comandos entre os bancos para obter informações de sessão. Pegando Informações de Sessão no Oracle: SELECT   machine                                               AS   maquina ,         osuser                                   ...

[Kettle] Ajustes de performance na conexão com o MSSQL

Imagem
Segue abaixo nesta dica rápida (1a via celular) alguns parâmetros extra para melhorar o desempenho da conexão com o MSSQL no PDI (Kettle) e também para complementar as informações de conexão, facilitando a identificação através do Activity Monitor. Os parâmetros são os seguintes: sendStringParameterAsUnicode - Se definido como "false" evita que o driver envie os campos de tipo string do Kettle como nvarchar para o banco. Ao invés disso o envio é feito no formato padrão varchar. Isso ajuda por exemplo para que o banco consiga fazer uso dos índices de forma eficiente. packetSize - Determina o tamanho máximo do pacote que é enviado para o banco. O padrão do driver é 8000, se definirmos como 0 então usará o máximo possível, que é 32767: applicationName - Exibe o nome da aplicação no monitor de conexões no MSSQL. Este parâmetro não influencia na performance, sendo apenas informativo. Na figura abaixo demonstro como aplicar estas configurações na conexão do Kettl...

[MSSQL] - Gerando script para criação de índices

Criei o comando abaixo para facilitar a criação/replicação de índices de uma base para outra. Usei o recurso de "xml path" para criar a lista dinâmica das colunas dos índices, evitando assim a necessidade de uso de cursor ou bloco TSQL. Acabei no final por criar um sub-select utilizando o comando "replace" para remover a última vírgula que ficou no final do comando gerado. Confesso que não ficou muito elegante, mas funcionou. Segue abaixo como ficou: SELECT   REPLACE ( comando , ',)' , ')' ) FROM     ( SELECT   'create INDEX '         +   i . name   +   ' on '           +   t . name   +   ' ('           +   ( SELECT     c . name   +   ','             FROM       sys . index_columns   ic ,          ...

Apagando Tabelas "Futuras" (acidentais) do módulo Contábil no MSSQL

Dias atrás publiquei no blog este artigo sobre apagar tabelas do módulo Contábil do CIGAM que foram criadas acidentalmente com sufixo de data no futuro. O artigo explica como realizar esta tarefa em banco Oracle, abaixo vou mostrar como realizar o mesmo procedimento no MSSQL: select   'DROP TABLE '   +   name   +   char ( 13 )   +   char ( 10 )   +   'go' from   sys . tables Where   name   like   'CCMC%' and   name   not   like   'CCMC20%' and   ( select   rowcnt       from   sysindexes       where   id = sys . tables . object_id       and   indid   =   1 ) >=   0   --Traz somente tabelas sem registros order   by   name A saída do script foi como esta: DROP   TABLE   CCMC11999 go DROP   TABLE   CCMC1...

[MSSQL] - Script simples para desabilitar Triggers de um database

Imagem
As vezes precisamos rapidamente desativar triggers de uma base de dados recém restaurada. Normalmente quando por exemplo, criamos uma base de testes a partir dos dados da oficial. Se não fazemos isso corremos o risco de estarmos fazendo testes que ativem triggers que podem gravar dados em outra base de produção de uma integração qualquer realizada através de triggers. Para isso podemos utilizar este simples script: SELECT     'alter table '   +   tb . name   +   ' disable trigger '   +   tr . name FROM       sys . triggers   tr ,           sys . tables   tb WHERE      tr . parent_id   =   tb . object_id ORDER   BY   1 Pelo Enterprise Management Studio fazemos a cópia do resultado da query acima: Colamos na área de query e rodamos para desativar as triggers: Após isso as triggers nã...

Ajustando campos Date para não gravar horário

Imagem
Os campos do tipo "Date" nas tabelas do CIGAM, como regra, salvam somente a data sem o horário nos registros. Quando realizamos alguma operação de insert/update diretamente pelo banco de dados é necessário que façamos uma adequação deste tipo de campo para não gravar o horário junto (padrão dos bancos de dados Oracle e MSSQL).   Os comandos que podemos usar para gravar da forma correta são os seguintes: Para Oracle:   Obs.: Como vimos bastante simples, basta usar a função "trunc" de sysdate (que retorna a data atual) ou do campo de tipo date que quisermos ajustar. Para MSSQL:   Obs.: Para MSSQL como podemos observar acima é um pouco mais complicado de converter, já que não existe a função trunc para datas. Desta forma se faz necessário utilizarmos uma combinação de funções de conversão: cast(floor(cast(getdate() as float)) as datetime). Bom, trata-se de um post bastante simples, com o intuito de ajudar nestas situações onde podemos perder um certo tempo ten...

[CIGAM] Alertas via Procedure em MSSQL

Complementando o post anterior, segue agora a procedure da geração dos alertas em MSSQL: SET   ansi_nulls    OFF   GO   SET   quoted_identifier    OFF   GO   CREATE   PROCEDURE   cgpr_utl_criaalerta (                    @assunto   VARCHAR ( 300 )    =   'TESTE' ,                   @cd_usu_aviso   CHAR ( 3 )    =   'SQL' ,                   @dt_previsao_ini   DATETIME    =   NULL ,                   @hr_previsao_ini   CHAR ( 6 )    =   NULL ,                  ...

Desfragmentando os índices de todas as tabelas de determinado database no MSSQL

Abaixo descrevo a rotina que utilizo para desfragmentar os índices das tabelas de determinada base. Normalmente crio uma procedure com o código abaixo, ou coloco o script diretamente nos blocos de código do agendador do SQLServer Agent no MSSQL 2000 ou MSDE. Se for no SQLExpress 2005, que não possue o Agent, crio um arquivo com extensão .sql e outro arquivo .cmd contendo a chamada para o arquivo .sql e crio uma agendamento no Agendador de tarefas do Windows rodando este arquivo .cmd. -- TROCAR NOME DA BASE NA LINHA ABAIXO EM [database_name] -- E NA LINHA DO COMANDO DBCC INDEXDEFRAG -- EX1.: De USE [database_name] por USE CIGAM . -- EX2.: De DBCC INDEXDEFRAG ([database_name] , @TableName, @IndexName) -- por DBCC INDEXDEFRAG ('CIGAM' , @TableName, @IndexName) USE [database_name] DECLARE @TableName sysname DECLARE @IndexName varchar(20) DECLARE cur_fetch CURSOR FOR SELECT t.name TableName, i.name IndexName FROM sys.sysindexes i, sys.tables t WHE...