Mudanças entre as edições de "Scritps Úteis"

De GeoSales
Ir para navegação Ir para pesquisar
Linha 1 330: Linha 1 330:
 
inner join sys.sysdatabases sd on sp.dbid = sd.dbid
 
inner join sys.sysdatabases sd on sp.dbid = sd.dbid
 
  WHERE program_name LIKE '%TJ2%' group by sd.name
 
  WHERE program_name LIKE '%TJ2%' group by sd.name
 +
</pre>
 +
 +
 +
* Magia do Jeff
 +
<pre>
 +
AND DS_OBSERVACAO LIKE '%[^A-Za-z@#$0-9@/_ .,+%!-]%'
 
</pre>
 
</pre>

Edição das 19h21min de 31 de outubro de 2019

  • Comando pra saber se uma porta está em uso no windows
netstat -ano | find ":Required port number
netstat -ano | find "25"
  • Saber quais os processos estão bloqueado outros e não estão sendo bloqueados
select db_name(dbid), *
from sys.sysprocesses
where spid in (
     select blocked
      from sys.sysprocesses
     where blocked > 0)
      and blocked = 0
  • Detalhar um processo
EXEC sp_who2 252

DBCC inputbuffer(252)
  • Detalhar qual processo está rodando a partir de uma execução inicial
DECLARE @Handle varbinary(64);
SELECT @Handle = sql_handle FROM sys.dm_exec_requests WHERE session_id = 13933 and request_id = 0;
SELECT * FROM ::fn_get_sql(@Handle);
  • Ver a query que está sendo executada por um processo (Parâmetro spid)
DBCC INPUTBUFFER(6001)
  • Saber quais as bases estão vencidas que procedure vai apagar
USE bd_ssm_adm;

SELECT s.name, ub.DATA_EXPIRACAO FROM sys.sysdatabases s
LEFT JOIN USUARIO_BASE ub ON s.name = ub.nm_base
WHERE 
	s.name LIKE 'bd_ssm_%'
	AND s.name NOT LIKE 'bd_ssm_adm'
	AND (ub.nm_base IS NULL OR ub.DATA_EXPIRACAO < GETDATE())
ORDER BY crdate ASC
  • Listar dados de todas as bases dinamicamente numa consulta só usando union all
select 'SELECT ''' + name + ''' ,* from '+name+'..INTERFACEERPCONFIGURACAOPARAMETRO UNION ALL' from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%' 
	and name not like '%login%' 
order by name asc;


  • Checar qual versão determinado vendedor tá usando
select cd_usuario,
       substring(ds_log, CHARINDEX('@', ds_log) + 1, charindex(':', ds_log, CHARINDEX('@', ds_log) + 1) - CHARINDEX('@', ds_log) - 1)
from LOG_SINCRONISMO with(nolock) 
order by 2
  • Descobrir exatamente qual script está sendo executado no momento dado um processo qualquer
DECLARE @comandoSQL VARCHAR(8000)
SET @comandoSQL = (SELECT CAST([TEXT] AS VARCHAR(8000))
FROM ::fn_get_sql((SELECT [sql_handle] FROM sysprocesses where spid = 1071)))
select @comandoSQL
  • Descobrir exatamente qual script está sendo executado no momento dado um processo qualquer quando existem mais de um script sendo executado

em background para o spid passado

DECLARE @comandoSQL VARCHAR(8000)
DECLARE @tableComandoSQL TABLE (comando VARCHAR(8000))
--SET @comandoSQL = (SELECT CAST([TEXT] AS VARCHAR(8000))
--FROM ::fn_get_sql((SELECT [sql_handle] FROM sysprocesses where spid = 1071)))
--select @comandoSQL
INSERT INTO @tableComandoSQL SELECT CAST([TEXT] AS VARCHAR(8000))
FROM ::fn_get_sql((SELECT top 1 [sql_handle] FROM sys.sysprocesses where spid = 1071))
SELECT * FROM @tableComandoSQL
  • Ver o tamanho das tabelas
SELECT
    OBJECT_NAME(object_id) As Tabela, Rows As Linhas,
    SUM(Total_Pages * 8) As Reservado,
    SUM(CASE WHEN Index_ID > 1 THEN 0 ELSE Data_Pages * 8 END) As Dados,
        SUM(Used_Pages * 8) -
        SUM(CASE WHEN Index_ID > 1 THEN 0 ELSE Data_Pages * 8 END) As Indice,
    SUM((Total_Pages - Used_Pages) * 8) As NaoUtilizado
FROM
    sys.partitions As P
    INNER JOIN sys.allocation_units As A ON P.hobt_id = A.container_id
GROUP BY OBJECT_NAME(object_id), Rows
ORDER BY DADOS DESC
  • Listar agendamentos de importações de todas as empresas num único script (Caso você queira adicionar mais empresas só seguir o modelo)
select 'bd_ssm_DCA', * from bd_ssm_DCA..CONFIGURACAO_GERA_REGISTRO_AUTO
union all
select 'bd_ssm_CAMIL', * from bd_ssm_CAMIL..CONFIGURACAO_GERA_REGISTRO_AUTO
union all
select 'bd_ssm_BEVILAQUA', * from bd_ssm_BEVILAQUA..CONFIGURACAO_GERA_REGISTRO_AUTO
union all
select 'bd_ssm_GUARAVES', * from bd_ssm_GUARAVES..CONFIGURACAO_GERA_REGISTRO_AUTO
union all
select 'bd_ssm_PAULUS', * from bd_ssm_PAULUS..CONFIGURACAO_GERA_REGISTRO_AUTO
  • Ver todas as bases que utilizam a geração de registro automático
sp_update_databases 
'
insert into ##tabela
select db_name(),* from CONFIGURACAO_GERA_REGISTRO_AUTO', 'org_venda_cliente'
</pre

*Update com select e join:
<pre>
UPDATE PEDIDO SET PEDIDO.NM_CLIENTE = (C.NM_CLIENTE)
from PEDIDO
inner join CLIENTE C on 
PEDIDO.CD_CLIENTE = C.CD_CLIENTE
WHERE PEDIDO.DT_EMISSAO >= '2016-10-01' AND PEDIDO.NM_CLIENTE IS NULL
  • Atualizar Nome da Tabela
EXEC sp_rename 'ITEM_PEDIDO_REMESSA_FUTURA', 'ITEM_PED_REMESSA_FUTURA';
  • Remover Foreign Keys
select * from sys.sysobjects where name = 'FK__LISTA_PRO__CD_SE__361203C5'
SELECT * FROM sys.sysobjects where ID = 907150277
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
ALTER TABLE ITEM_PEDIDO_EXCLUIDO DROP CONSTRAINT FK_SAV_ITEM__PEDIDO_PEDIDO_DEL; 
  • Remover Foreign Keys Dinamicamente
SELECT DISTINCT 'ALTER TABLE ' + KCU1.TABLE_NAME + ' DROP CONSTRAINT ' + KCU1.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
 AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
 AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG 
 AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA
 AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
 AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
JOIN sys.foreign_keys FK on FK.name = KCU1.CONSTRAINT_NAME
  • Retornar consulta por banco de dados do tamanho usado no banco
select 'Use '+name+';' + 'Exec SP_SpaceUsed ;'  from sys.databases
where  name like 'bd_ssm_%' and state_desc = 'online' and name not like '%prontaentrega%' 
and name not like '%adm%'
  • Lista os Vendedores da Hierárquia do Supervisor passado no Parâmetro
SELECT cd_vendedor [Código], 
       nm_vendedor [Vendedor]
FROM   fn_obter_vendedores_supervisor(#codigoSupervisor#)
  • Lista os Supervisores Acima da Hierárquia do Supervisor passado no Parâmetro, incluindo ele mesmo
SELECT S.cd_supervisor [Código], 
       S.nm_supervisor [Supervisor] 
FROM   fn_obter_supervisor_supervisores(#codigoSupervisor#) FOSS 
       INNER JOIN SUPERVISOR S 
               ON FOSS.cd_supervisor = S.cd_supervisor
  • Lista os Supervisores Abaixo da Hierárquia do Supervisor passado no Parâmetro, incluindo ele mesmo
SELECT S.cd_supervisor [Código], 
       S.nm_supervisor [Supervisor] 
FROM   fn_obter_supervisores_supervisor(#codigoSupervisor#) FOSS 
       INNER JOIN SUPERVISOR S 
               ON FOSS.cd_supervisor = S.cd_supervisor
  • Verificar processos que estão travando o banco e ver a query do processo que está travado
    • Selecionar os 100 primeiros processos bloqueados no banco
select TOP 100 *
from sys.sysprocesses
where blocked <> 0
  • Selecionar todos os processos bloqueados no banco ordenados por spid
select spid, blocked, hostname=left(hostname,20), program_name=left(program_name,20),
       WaitTime_Seg = convert(int,(waittime/1000))  ,open_tran, status
From master.dbo.sysprocesses 
where blocked > 0
order by spid
  • Então você precisa verificar quais processos estão rodando em um determinado banco de dados:
    • Lista todos os processos existentes em uma determinada base de dados
DECLARE @database VARCHAR(100) = 'bd_ssm_suabase' -- INSIRA AQUI O NOME DO BANCO DE DADOS  
DECLARE @processosTemp TABLE 
  ( 
     spid       SMALLINT, 
     ecid       SMALLINT, 
     status     NCHAR(30), 
     loginname  NCHAR(128), 
     hostname   NCHAR(128), 
     blk        CHAR(5), 
     dbname     NCHAR(128), 
     cmd        NCHAR(16), 
     request_id INT 
  ) 

INSERT INTO @processosTemp 
EXEC Sp_who 

SELECT * 
FROM   @processosTemp 
WHERE  dbname = @database 
ORDER  BY spid 
  • Aí você precisa remover essa base - faça esse procedimento apenas no ambiente de teste - mas existem processos bloqueando essa remoção. Então você deverá remover os mesmos processos referentes a consulta acima, para depois DROPAR a base.
declare @execSql varchar(1000), @databaseName varchar(100)  
set @databaseName = 'bd_ssm_suabase'  -- INSIRA O NOME DA BASE QUE QUER MATAR SEUS PROCESSOS EM ABERTO

set @execSql = ''   
select  @execSql = @execSql + 'kill ' + convert(char(10), spid) + CHAR(13)+CHAR(10)  
from    master.dbo.sysprocesses  
where   db_name(dbid) = @databaseName  
     and  
     DBID <> 0  
     and  
     spid <> @@spid  
order by spid
exec(@execSql)
  • Script para verificar se exste alguma configuração para algum serviço de envio de e-mail ativado
SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'ENVIA_EMAIL_CLIENTE_PEDIDO_EXPORTADO'

SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'ENVIA_EMAIL_CLIENTE_PEDIDO_NAO_EFETIVADO'

SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'ENVIA_EMAIL_FINANC_NOVO_CLIENTE'

SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'ENVIA_EMAIL_SUPERVISOR_PEDIDO_PENDENTE'

SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'CONDICAO_PAGAMENTO_ESPECIAL'

SELECT * FROM CONFIGURACAO 
WHERE DS_CHAVE = 'SP_ENVIA_EMAIL_CLIENTE_PEDIDO_CRIACAO'
  • Script para ver todas as foreign keys do banco
SELECT 
 KCU1.CONSTRAINT_NAME AS 'FK_Nome_Constraint'
 , KCU1.TABLE_NAME AS 'FK_Nome_Tabela'
 , KCU1.COLUMN_NAME AS 'FK_Nome_Coluna'
 , FK.is_disabled AS 'FK_Esta_Desativada'
 , KCU2.CONSTRAINT_NAME AS 'PK_Nome_Constraint_Referenciada'
 , KCU2.TABLE_NAME AS 'PK_Nome_Tabela_Referenciada'
 , KCU2.COLUMN_NAME AS 'PK_Nome_Coluna_Referenciada'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
 AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
 AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG 
 AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA
 AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
 AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
JOIN sys.foreign_keys FK on FK.name = KCU1.CONSTRAINT_NAME

--where KCU1.CONSTRAINT_NAME like '%FK_PEDIDO_EXCLUIDO__PEDIDO%'
Order by 
KCU1.TABLE_NAME
  • Script para Cadastro de Menu do Portal

-- SELECT * FROM MENU WHERE DS_MENU IN('Cadastro', 'Bonificação','Associada ao Pedido')
-- UPDATE MENU SET DS_URL = null WHERE CD_MENU = 130
-- SELECT * FROM MENU WHERE CD_MENU_PAI = 1

-- INCLUSÃO DE MENU -- 
DECLARE @dsMenu    VARCHAR(100), 
        @dsMenuPai VARCHAR(100), 
        @cdMenuPai INT 

SELECT @dsMenu = 'Parâmetros de Configuração', 
       @dsMenuPai = 'Cadastro'
 
SELECT	@dsMenu = LTRIM(RTRIM(@dsMenu)),
		@dsMenuPai = LTRIM(RTRIM(@dsMenuPai))

SET @cdMenuPai = (SELECT TOP 1 cd_menu 
                  FROM   menu 
                  WHERE  ds_menu = @dsMenuPai)

IF ( @cdMenuPai IS NOT NULL ) 
  BEGIN 
      IF NOT EXISTS (SELECT 1 
                     FROM   menu 
                     WHERE  ds_menu = @dsMenu 
                            AND cd_menu_pai = @cdMenuPai) 
        BEGIN 
            INSERT INTO menu 
                        (cd_menu, 
                         ds_menu, 
                         ds_url, 
                         ds_param, 
                         cd_menu_pai, 
                         id_ativo) 
            SELECT Max(Isnull(cd_menu, 0)) + 1, 
                   @dsMenu, 
                   @dsMenu, 
                   NULL, 
                   @cdMenuPai, 
                   'S' 
            FROM   menu 
            
            PRINT '-----------------  MENU CADASTRADO COM SUCESSO  -----------------'
			PRINT 'FOI CADASTRADO O SUBMENU "'+ @dsMenu + '" NO MENU "'+ @dsMenuPai + '"!'
        END 
        ELSE
        BEGIN
			PRINT '-----------------  FALHA AO CADASTRAR MENU  -----------------'
			PRINT 'JÁ EXISTE O SUBMENU "'+ @dsMenu + '" NO MENU "'+ @dsMenuPai + '"!'
        END
  END 

  • Conjunto de Selects para visualizar se há algum desconto sendo persistido na base do Mobile
select  * from desconto_produto;
select * from DESCONTO_ORG_PRODUTO;
select * from DESCONTO_MEGAZORD;
select * from DESCONTO_ICMS_DIF;
select * from DESCONTO_CLIENTE_FORNEC;
select * from DESCONTO_CLIENTE;
select * from DESCONTO_FORNECEDOR;
select * from DESCONTO_MEGAZORD_SEGMENTO;
select * from DESCONTO_UF;
select  * from desco_cliente_familia;
select * from DESCO_GRUP_CLIEN_FAMIL;
select * from desconto_cliente;
select  * from DESCO_VENDEDOR_FAMILIA;
select * from DESCO_GRUP_CLIEN_FAMIL;
select * from DESCO_GRUP_CLIENT_VEND;
select * from DESCO_GRUPO_CLIEN_PROD;
select * from DESCONTO_VEND_PRODUTO;
select * from DESCONTO_UF_PRODUTO;
select * from DESCONTO_UF_FAMILIA;

select * from DESCONTO_CLIENTE_PRODUT;
  • Select para contar os registros de uma tabela sem derrubar o banco
SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('log_alteracao_usuario')   
AND (index_id=0 or index_id=1);
  • Desabilitar as triggers de geração de registros
select 'alter table '+ OBJECT_NAME(parent_id)+ ' disable trigger '+name from sys.triggers
where name like 'log%'
order by 1, name
  • Habilitar as triggers de geração de registros
select 'alter table '+ OBJECT_NAME(parent_id)+ ' enable trigger '+name from sys.triggers
where name like 'log%'
order by 1, name
  • Consulta para ver os processos em execução no banco da camil
select DB_NAME(dbid),* from sys.sysprocesses
where program_name like '%ssmicro%'
and status like '%run%'

dbcc inputbuffer(61)
dbcc inputbuffer(65)
guarda essa consulta
  • Listar todas as bases ativas criando um use bd_ssm_nomeempresa
select 'Use '+name+';' from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%' 
order by name asc;

  • Contar os registros da log_alteracao_usuario sem parar o banco de dados
SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('log_alteracao_usuario')   
AND (index_id=0 or index_id=1);
  • Truncar tabela de log
TRUNCATE TABLE LOG_ALTERACAO_USUARIO;
  • Usando a sys.databases de forma inteligente para economizar trabalho
select 'use ' + name + '; select ' +name + ',* from CAMPO where cd_campo = 23;'
from sys.databases
where name like 'bd_ssm_%' and state_desc <> 'OFFLINE'
  • Listar todos os bancos de dados de empresa da softsite
select name from sys.databases
where name like 'bd_ssm_%';
  • Limpeza de cadastros do ADM
SELECT E.NM_EMPRESA, EB.DS_DATABASE, * FROM EMPRESA E 
INNER JOIN EMPRESA_BD EB ON (E.CD_EMPRESA = EB.CD_EMPRESA)
INNER JOIN sys.sysdatabases SD ON (SD.name = EB.DS_DATABASE) 
SELECT E.CD_EMPRESA, E.NM_EMPRESA, EB.DS_DATABASE, * FROM EMPRESA E 
LEFT JOIN EMPRESA_BD EB ON (E.CD_EMPRESA = EB.CD_EMPRESA)
LEFT JOIN sys.sysdatabases SD ON (SD.name = EB.DS_DATABASE)
WHERE 
	SD.name IS NULL	

SELECT E.CD_EMPRESA, E.NM_EMPRESA, EB.DS_DATABASE, * FROM EMPRESA E 
LEFT JOIN EMPRESA_BD EB ON (E.CD_EMPRESA = EB.CD_EMPRESA)
LEFT JOIN sys.sysdatabases SD ON (SD.name = EB.DS_DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS) 
INNER JOIN sys.databases SBD ON (SBD.name = EB.DS_DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS) 
WHERE 
	state_desc = 'OFFLINE'
  • Tabelas que tem que ser analisadas
EMPRESA_SYNC_SISTEMA
EMPRESA_SYNC_BD
EMPRESA_SISTEMA
EMPRESA_BD
EMPRESA
  • Deletes necessários para limpar as bases
Na base ADM:
select * from empresa order by nm_empresa asc
use bd_ssm_adm;
SELECT * FROM EMPRESA WHERE NM_EMPRESA LIKE 'fiorehomolog' --619

DELETE FROM EMPRESA_SYNC_BD WHERE CD_EMPRESA IN (619)
DELETE FROM EMPRESA_BD WHERE CD_EMPRESA IN (619)
DELETE FROM EMPRESA_SYNC_SISTEMA WHERE CD_EMPRESA IN (619)
DELETE FROM EMPRESA_SISTEMA WHERE CD_EMPRESA IN (619)
DELETE FROM EMPRESA WHERE CD_EMPRESA IN (619)

USE bd_ssm_login;
SELECT * FROM bd_ssm_login..USUARIO_EMPRESA WHERE NM_EMPRESA LIKE 'fiorehomolog'

DELETE FROM MODULO_EMPRESA WHERE CD_EMPRESA IN (619)
DELETE FROM USUARIO WHERE CD_USUARIO IN (1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157)
DELETE FROM USUARIO_EMPRESA WHERE NM_EMPRESA = 'fiorehomolog'
  • Verificar quantidade de conexões abertas por base utilizadas pelo portal
select db_name(dbid), count(*)
from sys.sysprocesses
where 1=1
--and   db_name(dbid) = 'bd_ssm_criasim'
and program_name = 'jTDS'
group 
by db_name(dbid)
  • Comando para gerar os drops das Triggers do claudus
select ' drop trigger ', tr.name  from sys.sysobjects tr
inner join sys.sysobjects tb on tr.parent_obj = tb.id and tb.xtype = 'U'
where tr.xtype = 'tr'
and tr.name like 'TR_AUDIT%'
  • Remover empresas do import que não estão mais acessíveis na base
use bd_ssm_adm

select  * 
--update es set id_realiza_importacao
from EMPRESA_SISTEMA es
inner join empresa_bd bd on es.CD_EMPRESA = bd.CD_EMPRESA 
left  join sys.databases d on d.name = bd.DS_DATABASE collate Latin1_General_CI_AS
where (d.name is null or d.snapshot_isolation_state_desc = 'OFF')
  • Listar algo em todas as bases numa consulta só
select 'select ''' + name + ''', *  from ' + name + '.dbo.INTERFACEERPCONFIGURACAOPARAMETRO where VR_PARAMETRO NOT LIKE ''%PEDIDO%ITEM_PEDIDO%'' UNION ALL'
from sys.databases
where name like 'bd_ssm_%' and state_desc <> 'OFFLINE' and (name not like '%pronta%' AND name not like 'bd_ssm_adm')
  • Descobrindo as empresas que importam
update es set id_realiza_importacao
from EMPRESA_SISTEMA es
inner join empresa_bd bd on es.CD_EMPRESA = bd.CD_EMPRESA 
left  join sys.databases d on d.name = bd.DS_DATABASE collate Latin1_General_CI_AS
where (d.name is null or d.snapshot_isolation_state_desc = 'OFF')


  • UPDATE para atualizar dados duplicados da tabela 001
UPDATE LISTA_PRODUTO_001
SET data_delete = data_insert+('00:00:00.200')
where id in (
-2146273629,
-2146273628,
-2146273627,
-2146273626,
-2146273625,
-2146273624,
-2146273623,
-2146273622,
-2146273621)
  • Comando para concatenar dentro do group by
STUFF

SELECT NM_ESTADO,
       NM_CIDADE,
       STUFF(
               (SELECT DISTINCT ',' + NM_FANTASIA
                FROM cliente
                WHERE NM_ESTADO = a.NM_ESTADO
                  AND NM_CIDADE = a.NM_CIDADE
                  FOR XML PATH ('')) , 1, 1, '') AS URLList
FROM cliente AS a
WHERE NM_ESTADO = 'CE'
  AND NM_CIDADE = 'fortaleza'
GROUP BY NM_ESTADO,
         NM_CIDADE
  • Template base pra criar o script de uma tabela NOVA pro TJ
/* Criar a tabela TMP pra empresas que utilizam import */
CREATE TABLE [dbo].[DESCONTO_LOTE_OV_TP_TMP]
  ( 
     CD_LOTE      int NOT NULL,  
     CD_ORG_VENDA VARCHAR(20) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI NOT NULL, 
     CD_TAB_PRECO INT NOT NULL, 
	 PR_DESCONTO  DECIMAL(18, 6) NOT NULL,
	CONSTRAINT [PK_DESCONTO_LOTE_OV_TP_TMP] PRIMARY KEY CLUSTERED (
		[CD_LOTE] ASC,
		[CD_ORG_VENDA] ASC,
		[CD_TAB_PRECO] ASC
	) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

/* Criar a tabela de LOG */
CREATE TABLE LOG_DESCONTO_LOTE_OV_TP
(
CD_LOG INT IDENTITY PRIMARY KEY
,DT_LOG DATETIME NOT NULL
,TP_OPERACAO VARCHAR(1) NOT NULL
,ID_KEY VARCHAR(200) NOT NULL
,CD_LOTE int
,CD_ORG_VENDA VARCHAR(20)
,CD_TAB_PRECO INT)

/* Criar tabela 001 seguindo o padrão */
CREATE TABLE [dbo].[DESCONTO_LOTE_OV_TP_001]
  ( 
     [id] [int] IDENTITY(-2147483648,1) NOT NULL,
     CD_LOTE      INT NOT NULL,  
     CD_ORG_VENDA VARCHAR(20) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI NOT NULL, 
     CD_TAB_PRECO INT NOT NULL, 
	 PR_DESCONTO  DECIMAL(18, 6) NOT NULL,
     [data_insert] [datetime] NOT NULL,
	 [data_update] [datetime] NULL,
	 [data_delete] [datetime] NULL,
PRIMARY KEY NONCLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

/* Adicionar Index */
CREATE CLUSTERED INDEX PK_DESCONTO_LOTE_OV_TP ON DESCONTO_LOTE_OV_TP_001 (CD_LOTE ASC, CD_ORG_VENDA ASC, CD_TAB_PRECO ASC)

/* Adicionar constraint */
ALTER TABLE [dbo].[DESCONTO_LOTE_OV_TP_001] ADD  CONSTRAINT [DF_DATA_INSERCAO_DESCONTO]  DEFAULT (getdate()) FOR [data_insert]

/* Criar trigger na tabela nova adicionando os campos necessários */
CREATE TRIGGER [dbo].[TR_TJ_UPDATE_DESCONTO_LOTE_OV_TP]
ON [dbo].[DESCONTO_LOTE_OV_TP_001]
instead OF UPDATE
AS
  BEGIN
      SET nocount ON;

      UPDATE t
      SET    t.data_update = case when s.data_delete is null then  Getdate() else t.data_update end ,
             T.CD_LOTE = S.CD_LOTE,
			 T.CD_ORG_VENDA = S.CD_ORG_VENDA,
			 T.CD_TAB_PRECO = S.CD_TAB_PRECO,
			 T.PR_DESCONTO = S.PR_DESCONTO,
             t.data_delete = s.data_delete
      FROM   DESCONTO_LOTE_OV_TP_001 t
             INNER JOIN inserted s
                     ON ( t.id = s.id )

  END

/* Criar a view TJ */
CREATE VIEW [dbo].[DESCONTO_LOTE_OV_TP_TJ]
AS
  SELECT id,
         CD_LOTE, CD_ORG_VENDA, CD_TAB_PRECO, PR_DESCONTO
  FROM   DESCONTO_LOTE_OV_TP_001
  WHERE  data_delete IS NULL

/* Criar Trigger da view */
CREATE TRIGGER [dbo].[TR_TJ_DELETE_DESCONTO_LOTE_OV_TP]
ON [dbo].[DESCONTO_LOTE_OV_TP_TJ]
instead OF DELETE
AS
  BEGIN
      SET nocount ON;

      UPDATE t
      SET    data_delete = Getdate()
      FROM   deleted s
             INNER JOIN DESCONTO_LOTE_OV_TP_001 t
                     ON s.id = t.id

  END

/* Criar a view */
CREATE VIEW [dbo].[DESCONTO_LOTE_OV_TP]
AS
  SELECT CD_LOTE, CD_ORG_VENDA, CD_TAB_PRECO, PR_DESCONTO
  FROM   DESCONTO_LOTE_OV_TP_tj

/* Criar a função de navegação */
CREATE FUNCTION fn_REGISTRO_SYNC_DESCONTO_LOTE_OV_TP(@ID_VENDEDOR  INT,
                                                           @DT_LAST_SINC DATETIME)
RETURNS TABLE
AS
    RETURN
      (SELECT	DLOT.id,
				DLOT.CD_LOTE,
				DLOT.CD_ORG_VENDA,
				DLOT.CD_TAB_PRECO,
				DLOT.PR_DESCONTO,
				DLOT.DATA_DELETE
        FROM   DESCONTO_LOTE_OV_TP_001 DLOT
		WHERE  
			(
				( 
					( 
						( DLOT.DATA_INSERT >= @DT_LAST_SINC
							OR DLOT.DATA_UPDATE >= @DT_LAST_SINC 
						)
						AND DLOT.DATA_DELETE IS NULL 
					)
					OR ( DLOT.DATA_DELETE >= @DT_LAST_SINC
							AND DLOT.DATA_INSERT < @DT_LAST_SINC
							AND NOT EXISTS(SELECT 1
											FROM   DESCONTO_LOTE_OV_TP_001 T
											WHERE  DLOT.CD_LOTE = T.CD_LOTE
											AND DLOT.CD_ORG_VENDA = T.CD_ORG_VENDA
											AND DLOT.CD_TAB_PRECO = T.CD_TAB_PRECO
												AND T.DATA_DELETE IS NULL
											)
					)
					OR ( 
						@DT_LAST_SINC IS NULL
						AND DLOT.DATA_DELETE IS NULL
					)
				) 
			)
		)

/* Adicionando a função na tabela */
INSERT INTO TAMOJUNTO_TABELA_FUNCAO (NM_TABLE, NM_FN, FL_ATIVA) VALUES ('DESCONTO_LOTE_OV_TP', 'fn_REGISTRO_SYNC_DESCONTO_LOTE_OV_TP', 1)
  • Consulta para retornar os 20 processos que estão consumindo mais recursos de cpu no momento

SELECT TOP 20
GETDATE() AS 'Collection Date',
qs.execution_count AS 'Execution Count',
SUBSTRING(qt.text,qs.statement_start_offset/2 +1,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2
) AS 'Query Text',
DB_NAME(qt.dbid) AS 'DB Name',
qs.total_worker_time AS 'Total CPU Time',
qs.total_worker_time/qs.execution_count AS 'Avg CPU Time (ms)',
qs.total_physical_reads AS 'Total Physical Reads',
qs.total_physical_reads/qs.execution_count AS 'Avg Physical Reads',
qs.total_logical_reads AS 'Total Logical Reads',
qs.total_logical_reads/qs.execution_count AS 'Avg Logical Reads',
qs.total_logical_writes AS 'Total Logical Writes',
qs.total_logical_writes/qs.execution_count AS 'Avg Logical Writes',
qs.total_elapsed_time AS 'Total Duration',
qs.total_elapsed_time/qs.execution_count AS 'Avg Duration (ms)',
qp.query_plan AS 'Plan'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE
qs.execution_count > 50 OR
qs.total_worker_time/qs.execution_count > 100 OR
qs.total_physical_reads/qs.execution_count > 1000 OR
qs.total_logical_reads/qs.execution_count > 1000 OR
qs.total_logical_writes/qs.execution_count > 1000 OR
qs.total_elapsed_time/qs.execution_count > 1000
ORDER BY
qs.execution_count DESC,
qs.total_elapsed_time/qs.execution_count DESC,
qs.total_worker_time/qs.execution_count DESC,
qs.total_physical_reads/qs.execution_count DESC,
qs.total_logical_reads/qs.execution_count DESC,
qs.total_logical_writes/qs.execution_count DESC
GO

  • Consulta para ver se uma trigger está habilitada

select  ObjectProperty(Object_id(Name),'ExecIsTriggerDisabled') STATUS from sys.sysobjects where name = 'LOG_ALTERACAO_DELETE_PRODUTO_ESTOQUE'

  • Checar se um campo existe em uma tabela

SELECT T.name AS Tabela, C.name AS Coluna
FROM sys.sysobjects    AS T (NOLOCK) 
INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U' 
WHERE C.NAME LIKE '%CAMPO%'
ORDER BY T.name ASC

  • Alterar os paths de dados de importação da modelo para o nome da empresa cadastrada
USE bd_ssm_jptripas

DECLARE @empresa varchar(50);
SET @empresa = 'jptripas';

UPDATE CONFIGURACAO SET DS_VALOR = 'C:\Sistema\SSM\publico\'+@empresa+'\exportacao' WHERE DS_CHAVE='DS_PATH_ARQS_EXPORTACAO'
UPDATE CONFIGURACAO SET DS_VALOR = 'C:\Sistema\SSM\publico\'+@empresa+'\exportacao\backup' WHERE DS_CHAVE='DS_PATH_ARQS_EXPORTACAO_BKP'
UPDATE CONFIGURACAO SET DS_VALOR = 'C:\Sistema\SSM\publico\'+@empresa+'\importacao' WHERE DS_CHAVE='DS_PATH_ARQS_IMPORTACAO'
UPDATE CONFIGURACAO SET DS_VALOR = 'C:\Sistema\SSM\publico\'+@empresa+'\describer' WHERE DS_CHAVE='DS_PATH_DESCRIBER'
UPDATE CONFIGURACAO SET DS_VALOR = 'C:\Sistema\SSM\publico\'+@empresa+'\versao' WHERE DS_CHAVE='DS_PATH_DIRS_VERSOES'

UPDATE CONFIGURACOES SET DS_PATH_ARQS_IMPORTACAO = 'C:\Sistema\SSM\publico\'+@empresa+'\importacao' WHERE CD_CONFIGURACAO=1
UPDATE CONFIGURACOES SET DS_PATH_ARQS_EXPORTACAO = 'C:\Sistema\SSM\publico\'+@empresa+'\exportacao' WHERE CD_CONFIGURACAO=1
UPDATE CONFIGURACOES SET DS_PATH_ARQS_EXPORTACAO_BKP= 'C:\Sistema\SSM\publico\'+@empresa+'\importacao' WHERE CD_CONFIGURACAO=1
UPDATE CONFIGURACOES SET DS_PATH_DESCRIBER = 'C:\Sistema\SSM\publico\'+@empresa+'\describer' WHERE CD_CONFIGURACAO=1
UPDATE CONFIGURACOES SET DS_PATH_DIRS_VERSOES = 'C:\Sistema\SSM\publico\'+@empresa+'\versao' WHERE CD_CONFIGURACAO=1


  • Script para análise de que se existe a tabela no tamojunto para inserir
select ' USE ' + name + '; IF(((SELECT COUNT(*) FROM tamojunto_tabela_funcao WHERE NM_TABLE = ''CLIENTE'') = 0) AND (EXISTS (SELECT TOP 1 1 FROM   sys.objects WHERE  NAME = ''CLIENTE_001''))) BEGIN INSERT INTO tamojunto_tabela_funcao VALUES (''CLIENTE'', ''fn_REGISTRO_SYNC_CLIENTE'', 1) END' from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%'  
	and name not like '%protheus%'
	and name not like '%login%' 
order by name asc;


  • Script para contar quantas licenças uma empresa tem.
DECLARE @VisaoLicencasUsuariosPorEmpresa TABLE ( 
  NM_EMPRESA VARCHAR(50),
  NR_LICENCAS INT,
  NR_LICENCAS_PORTAL INT,
  NR_USUARIOS_SOMENTE_PORTAL INT,
  NR_USUARIOS_SOMENTE_MOBILE INT,
  NR_USUARIOS_PORTAL_MOBILE INT,
  NR_USUARIOS_PORTAL_MOBILE_UNICO INT,
  NR_USUARIOS_TOTAL INT)

DECLARE @NrLicencas INT, @NrLicencasPortal INT, @NmEmpresa VARCHAR(50), 
@NrUsuariosSomentePortal INT, @NrUsuariosSomenteMobile INT, @NrUsuariosPortalMobile INT, @NrUsuariosPortalMobileUnico INT;
SELECT @NmEmpresa = 'makita',   @NrLicencas = (SELECT TOP 1 ISNULL(ES.NR_LICENCAS, 0) FROM bd_ssm_adm..EMPRESA_BD EB INNER JOIN bd_ssm_adm..EMPRESA_SISTEMA ES ON EB.CD_EMPRESA = ES.CD_EMPRESA WHERE EB.DS_DATABASE = 'bd_ssm_makita'),   @NrLicencasPortal = (SELECT TOP 1 CAST(ISNULL(ES.NR_LICENCAS_PORTAL, 0) AS VARCHAR(10)) FROM bd_ssm_adm..EMPRESA_BD EB INNER JOIN bd_ssm_adm..EMPRESA_SISTEMA ES ON EB.CD_EMPRESA = ES.CD_EMPRESA WHERE EB.DS_DATABASE = 'bd_ssm_makita'),    @NrUsuariosSomenteMobile = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_makita..DADOS_VENDEDOR WHERE ID_PALM IS NOT NULL AND CD_USUARIO_SEGURANCA IS NULL),   @NrUsuariosSomentePortal = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_makita..TUSUARIO WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND CD_USUARIO NOT IN (SELECT DISTINCT CD_USUARIO_SEGURANCA FROM bd_ssm_makita..DADOS_VENDEDOR WHERE CD_USUARIO_SEGURANCA IS NOT NULL)),   @NrUsuariosPortalMobile = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_makita..TUSUARIO T INNER JOIN bd_ssm_makita..DADOS_VENDEDOR DV ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND ID_PALM IS NOT NULL),   @NrUsuariosPortalMobileUnico = (SELECT ISNULL(COUNT(DISTINCT CD_USUARIO_SEGURANCA), 0) FROM bd_ssm_makita..DADOS_VENDEDOR WHERE CD_USUARIO_SEGURANCA IS NOT NULL AND ID_PALM IS NOT NULL);   
INSERT INTO @VisaoLicencasUsuariosPorEmpresa VALUES (@NmEmpresa, @NrLicencas, @NrLicencasPortal, @NrUsuariosSomentePortal, @NrUsuariosSomenteMobile, @NrUsuariosPortalMobile, @NrUsuariosPortalMobileUnico, (@NrUsuariosPortalMobile + @NrUsuariosSomenteMobile + @NrUsuariosSomentePortal));
SELECT * FROM @VisaoLicencasUsuariosPorEmpresa;
  • Código que deve ser executado quando se restaurar uma base de produção em homologação.
UPDATE CONFIGURACAO SET DS_VALOR = 'http://homologacao.geosalesmobile.com/super/supervisor/gerencial/getRelatorioGerencial/' WHERE DS_CHAVE = 'DS_URL_REL_GERENCIAL'
UPDATE CONFIGURACAO SET DS_VALOR = 'http://homologacao.geosalesmobile.com/super/services/WebService' WHERE DS_CHAVE = 'DS_URL_SERVICE'
UPDATE CONFIGURACAO SET DS_VALOR = 'http://sync.geosalesmobile.com:8184/ssmservices' WHERE DS_CHAVE = 'GPS_BASE_URL'
UPDATE CONFIGURACAO SET DS_VALOR = 'http://sync.geosalesmobile.com:8184/ssmservices' WHERE DS_CHAVE = 'URL_WEBSERVICE'
  • Shrink
DBCC SHRINKDATABASE('bd_ssm_campneus', 0)


  • Controle de licenças

	SELECT program_name, HOSTNAME, *
			FROM  sys.sysprocesses
	where program_name = 'passwordsenderws'
INSERT INTO empresa_bd_properties 
SELECT CD_EMPRESA, 'passwordsenderws', NULL, 2 FROM EMPRESA
  • Verificar processo de importação
select db_name(dbid), *
from sys.sysprocesses
where program_name like '%Import%'
and db_name(dbid) = 'bd_ssm_boreda'


  • Analisar base que está dando erro no claudus
select 'SELECT ''' + name + ''' ,* from '+name+'..LOG_SERVER_CLOUD WHERE ID_STATUS_DEL = ''F'' UNION ALL' from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%' 
	and name not like '%login%' 
order by name asc;


SELECT A.NAME, A.TYPE, B.TEXT
  FROM SYSOBJECTS  A (nolock)
  JOIN SYSCOMMENTS B (nolock) 
    ON A.ID = B.ID
WHERE B.TEXT LIKE '%ITEM_PEDIDO%'  --- Informação a ser procurada no corpo da procedure, funcao ou view
    AND B.TEXT LIKE '%LOG_ALTERACAO_USUARIO%'
    AND B.TEXT LIKE '%''D''%'
  AND A.TYPE = 'TR'                     --- Tipo de objeto a ser localizado no caso procedure
 ORDER BY A.NAME
DECLARE @Search varchar(255)
SET @Search='EXCLUINDO REGISTROS NÃO SINCRONIZADOS'

SELECT DISTINCT
    o.name AS Object_Name,o.type_desc
    FROM sys.sql_modules        m 
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
    WHERE m.definition Like '%'+@Search+'%'
    ORDER BY 2,1
  • Verificar falhas no claudus em todas as bases
select 'SELECT ''' + name + ''' ,* from '+name+'..LOG_SERVER_CLOUD  WHERE ID_STATUS_DEL = ''F'' OR ID_STATUS_INS = ''F'' UNION ALL' from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%' 
	and name not like '%login%' 
order by name asc;
  • Analisar vínculos de frete
select * from CLIENTE where nm_cliente like '%POLO DISTR%'
SELECT * FROM APLICACAO_FRETE;
SELECT CD_CLASSE_FRETE, * FROM PRODUTO WHERE CD_PRODUTO = 12951 
SELECT * FROM FAIXA_PRECO_FRETE WHERE CD_CLASSE_FRETE = 0 and CD_FRETE in (13527306, 23527306, 33527306)

select * from PRACA where CD_PRACA = 3527306
select * from CLIENTE_PRACA where CD_CLIENTE = 100669301 --3527306
select* from FRETE where CD_PRACA = 3527306
UPDATE TAMOJUNTO_TABELA_FUNCAO SET FL_ATIVA = 1
WHERE FL_ATIVA = 0 AND NM_TABLE NOT IN ('DESCO_GRUP_CLIEN_FAMIL', 'TIPO_PRODUTO_MOVIMENTO')
  • Aprovar pedidos manualmente.
SELECT 'EXEC autorizar_item_pedido_super ' + CAST(IP.CD_PEDIDO_PALM AS VARCHAR(20)) + ', ' + 
CAST(IP.NR_ITEM_PEDIDO AS VARCHAR(20)) + ', ' + CAST(IP.CD_PRODUTO AS VARCHAR(15)) + ', NULL, ''S'', 14 '
 FROM ITEM_PEDIDO IP WHERE CD_PEDIDO_PALM IN (190302065635151583)
 
SELECT 'EXEC autorizar_pedido_super ' + CAST(P.CD_PEDIDO_PALM AS VARCHAR(20)) + ', 14, 0 '  
FROM PEDIDO P WHERE CD_PEDIDO_PALM IN (190302065635151583)
  • Contagem de licenças

DECLARE @VisaoLicencasUsuariosPorEmpresa TABLE ( 
  NM_EMPRESA VARCHAR(50),
  NR_LICENCAS INT,
  NR_LICENCAS_PORTAL INT,
  NR_USUARIOS_SOMENTE_PORTAL INT,
  NR_USUARIOS_SOMENTE_PORTAL_BLOQUEADOS INT,
  NR_USUARIOS_SOMENTE_MOBILE INT,
  NR_USUARIOS_PORTAL_MOBILE_COM_ID_PALM INT,
  NR_USUARIOS_PORTAL_MOBILE_COM_ID_PALM_BLOQUEADO INT,
  NR_USUARIOS_PORTAL_MOBILE_SEM_ID_PALM INT,
  NR_USUARIOS_PORTAL_MOBILE_SEM_ID_PALM_BLOQUEADO INT,
  NR_USUARIOS_PORTAL_MOBILE_UNICO INT,
  NR_USUARIOS_TOTAL INT,
  NR_USUARIOS_DESATIVADOS INT,
  NR_USUARIOS_BLOQUEADOS_TOTAL INT)

DECLARE @NrLicencas INT, @NrLicencasPortal INT, @NmEmpresa VARCHAR(50), 
	@NrUsuariosSomentePortal INT, @NrUsuariosSomentePortalBloqueado INT, @NrUsuariosSomenteMobile INT,
    @NrUsuariosPortalMobileComIdPalm INT, @NrUsuariosPortalMobileComIdPalmBloqueado INT,
	@NrUsuariosPortalMobileSemIdPalm INT,  @NrUsuariosPortalMobileSemIdPalmBloqueado INT, @NrUsuariosPortalMobileUnico INT, 
	@NrUsuariosPortalDesativados INT, @NrUsuariosPortalBloqueados INT;

SELECT @NmEmpresa = 'camil',   
@NrLicencas = (SELECT TOP 1 ISNULL(ES.NR_LICENCAS, 0) FROM bd_ssm_adm..EMPRESA_BD EB INNER JOIN bd_ssm_adm..EMPRESA_SISTEMA ES ON EB.CD_EMPRESA = ES.CD_EMPRESA WHERE EB.DS_DATABASE = 'bd_ssm_camil'),   
@NrLicencasPortal = (SELECT TOP 1 CAST(ISNULL(ES.NR_LICENCAS_PORTAL, 0) AS VARCHAR(10)) FROM bd_ssm_adm..EMPRESA_BD EB INNER JOIN bd_ssm_adm..EMPRESA_SISTEMA ES ON EB.CD_EMPRESA = ES.CD_EMPRESA WHERE EB.DS_DATABASE = 'bd_ssm_camil'),    
@NrUsuariosSomenteMobile = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..DADOS_VENDEDOR WHERE ID_PALM IS NOT NULL AND CD_USUARIO_SEGURANCA IS NULL),   
@NrUsuariosSomentePortal = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO WHERE CD_SITUACAO <> 2 AND CD_SITUACAO <> 9 AND (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND CD_USUARIO NOT IN (SELECT DISTINCT CD_USUARIO_SEGURANCA FROM bd_ssm_camil..DADOS_VENDEDOR WHERE CD_USUARIO_SEGURANCA IS NOT NULL)),   
@NrUsuariosSomentePortalBloqueado = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO WHERE CD_SITUACAO <> 2 AND CD_SITUACAO = 9 AND (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND CD_USUARIO NOT IN (SELECT DISTINCT CD_USUARIO_SEGURANCA FROM bd_ssm_camil..DADOS_VENDEDOR WHERE CD_USUARIO_SEGURANCA IS NOT NULL)),   
@NrUsuariosPortalMobileComIdPalm = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T INNER JOIN bd_ssm_camil..DADOS_VENDEDOR DV ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND ID_PALM IS NOT NULL AND T.CD_SITUACAO <> 2 AND T.CD_SITUACAO <> 9),   
@NrUsuariosPortalMobileComIdPalmBloqueado = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T INNER JOIN bd_ssm_camil..DADOS_VENDEDOR DV ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND ID_PALM IS NOT NULL AND T.CD_SITUACAO <> 2 AND T.CD_SITUACAO = 9),   
@NrUsuariosPortalMobileSemIdPalm = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T INNER JOIN bd_ssm_camil..DADOS_VENDEDOR DV ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND ID_PALM IS NULL AND T.CD_SITUACAO <> 2 AND T.CD_SITUACAO <> 9 ),   
@NrUsuariosPortalMobileSemIdPalmBloqueado = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T INNER JOIN bd_ssm_camil..DADOS_VENDEDOR DV ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE (ID_USER_SOFTSITE <> 'S' OR ID_USER_SOFTSITE IS NULL) AND ID_PALM IS NULL AND T.CD_SITUACAO <> 2 AND T.CD_SITUACAO = 9),   
@NrUsuariosPortalMobileUnico = (SELECT ISNULL(COUNT(DISTINCT DV.CD_USUARIO_SEGURANCA), 0) FROM bd_ssm_camil..DADOS_VENDEDOR DV INNER JOIN TUSUARIO T ON T.CD_USUARIO = DV.CD_USUARIO_SEGURANCA WHERE DV.ID_PALM IS NOT NULL AND T.CD_SITUACAO <> 2),   
@NrUsuariosPortalDesativados = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T WHERE T.CD_SITUACAO = 2),
@NrUsuariosPortalBloqueados = (SELECT ISNULL(COUNT(*), 0) FROM bd_ssm_camil..TUSUARIO T WHERE T.CD_SITUACAO = 9);
INSERT INTO @VisaoLicencasUsuariosPorEmpresa VALUES (@NmEmpresa, @NrLicencas, @NrLicencasPortal, @NrUsuariosSomentePortal, @NrUsuariosSomentePortalBloqueado, @NrUsuariosSomenteMobile, @NrUsuariosPortalMobileComIdPalm, @NrUsuariosPortalMobileComIdPalmBloqueado, @NrUsuariosPortalMobileSemIdPalm, @NrUsuariosPortalMobileSemIdPalmBloqueado, @NrUsuariosPortalMobileUnico, (@NrUsuariosPortalMobileComIdPalm + @NrUsuariosPortalMobileComIdPalmBloqueado + @NrUsuariosPortalMobileSemIdPalm + @NrUsuariosPortalMobileSemIdPalmBloqueado + @NrUsuariosSomenteMobile + @NrUsuariosSomentePortal + @NrUsuariosSomentePortalBloqueado), @NrUsuariosPortalDesativados, @NrUsuariosPortalBloqueados);
	
SELECT * FROM @VisaoLicencasUsuariosPorEmpresa



SELECT  'INSERT INTO USUARIO_EMPRESA VALUES (' + 
CAST( (1331 + ROW_NUMBER() OVER(ORDER BY CD_USUARIO ASC) ) as VARCHAR(20)) + ',' +
CAST(CD_TUSUARIO AS VARCHAR(10)) + ',''' +
'estrellagaliciahomolog'', ' + 
CAST(VALIDO AS VARCHAR(10)) + ',''' +
ISNULL(CAST(DT_VALIDADE AS VARCHAR(100)), 'NULL') + ''',''' +
ISNULL(CAST(DT_CRIACAO AS VARCHAR(100)), 'NULL')  + ''',' +
CAST(PAPEL AS VARCHAR(10)) + ')' 
FROM USUARIO_EMPRESA WHERE NM_EMPRESA = 'estrellagalicia'


SELECT 'INSERT INTO USUARIO VALUES ' +
'(''' + ISNULL(U.NOME, 'NULL') + ''',''' +
ISNULL(U.LOGIN, 'NULL') + '' + ''',''' +
ISNULL(U.EMAIL, 'NULL') + ''',''' +
ISNULL(U.SENHA, 'NULL') + ''',''' +
ISNULL(U.SALT, 'NULL') + ''',''' +
ISNULL(U.TELEFONE, 'NULL')  + ''',''' +
ISNULL(CAST(U.NUMERO_VIOLACOES AS VARCHAR(100)), 'NULL') + ''',''' +
ISNULL(CAST(U.VALIDO AS VARCHAR(100)), 'NULL') + ''',''' +
ISNULL(CAST(U.DT_VALIDADE AS VARCHAR(100)), 'NULL') + ''',''' +
ISNULL(CAST(U.DT_CRIACAO AS VARCHAR(100)), 'NULL') + ''',''' +
ISNULL(U.URL_FOTO, 'NULL')  + ''',''' +
ISNULL(CAST(U.DELTA_ITERACOES AS VARCHAR(100)), 'NULL') + ''')' 
FROM USUARIO U
 INNER JOIN USUARIO_EMPRESA UE ON U.CD_USUARIO = UE.CD_USUARIO
WHERE NM_EMPRESA = 'estrellagalicia'

  • Análise de processo de importação
select * from dw_importacao order by 3 desc

select db_name(dbid), *
from sys.sysprocesses
where db_name(dbid) = 'bd_ssm_coopatos'
and program_name like '%Import%'

EXEC sp_who2 23230

DBCC INPUTBUFFER(23230)


--Reindex das Estruturas do Banco
Print	''
Print	'Data e Hora início:  ' + convert(varchar(20),GetDate(),25)
Print	'*****************************************'
Print	''
Declare @Tabela Varchar(300)
Declare @indice Varchar(300)
Declare @select varchar (2000)
declare @banco varchar(50)
set @banco = 'bd_ssm_makitabeta'
Print 'INICIO REBUILD BANCO DE DADOS: ' + upper(@banco)
Create table #temp (cod int primary key identity, banco varchar (100), tabela varchar (300), indice varchar (300))
		
insert into #temp (banco, tabela, indice)
exec ('select ' + '''' + @banco + '''' + ' as banco, o.name as tabela, i.name as indice from ' + @banco + '.sys.objects o
join ' + @banco + '.sys.indexes i on (o.OBJECT_id = i.OBJECT_id)
where o.type  = ''u''
	and i.name is not null
order by 2')
--select * from #temp
Declare Reindex Cursor
For 
select banco, tabela, indice from #temp

Open Reindex
Fetch Next From Reindex into @banco, @Tabela, @indice

Set Nocount On
While @@Fetch_Status = 0
Begin 
	Print (@Tabela)
	print('ALTER INDEX [' + @indice + '] ON ' + @banco + '.dbo.' + @tabela + ' REBUILD')
	Exec('ALTER INDEX [' + @indice + '] ON ' + @banco + '.dbo.' + @tabela + ' REBUILD')
	Print ' '
	Fetch Next From Reindex into @banco, @Tabela, @indice
	--Print 'Status: ' + cast(@@Fetch_Status as varchar(20))
End
Close Reindex
Deallocate Reindex
Set nocount off
Print	''
Print	'*****************************************'
Print	'Data e Hora Fim:  ' + convert(varchar(20),GetDate(),25)
Print	''
Print	''
  • Inserir banners em todas as bases de produção.
select 'INSERT INTO '+ name +'..BANNER (CD_BANNER,DS_BANNER,DT_INICIO_VIGENCIA,DT_FIM_VIGENCIA,DS_SITUACAO,LINK_IMAGEM,LINK_DIRECT,NR_TIMER,CD_TAMANHO) VALUES '+ 
' ( (SELECT MAX(CD_BANNER) + 1 FROM '+ name +'..BANNER), ''WEBINAR 3'', GETDATE(), ''2019-07-17 00:01:00.000'', 2, ''https://sscatalogo.s3.amazonaws.com/marketing/BANNER_PORTAL2019.jpg'', ''https://docs.google.com/forms/d/e/1FAIpQLSdk2gxpV7JBPHR5cv0ZPswLAzaajcrfI59rPQ69sqRaLf_tvQ/viewform'', 1, 1); ' +
' INSERT INTO '+ name +'..APLICACAO_BANNER (CD_APLICACAO_BANNER, CD_BANNER) VALUES ((SELECT MAX(CD_APLICACAO_BANNER) + 1 FROM '+ name +'..APLICACAO_BANNER), (SELECT MAX(CD_BANNER) FROM '+ name +'..BANNER));' 
from sys.databases
where  
	name like 'bd_ssm_%' 
	and state_desc = 'online' 
	and name not like '%prontaentrega%' 
	and name not like '%adm%' 
	and name not like '%login%' 
order by name desc;

  • Delete de registros já removidos da log_alteracao_usuario
SET nocount ON;

DECLARE @r INT;
DECLARE @msg VARCHAR(max)
DECLARE @restantes INT
DECLARE @t1 DATETIME
DECLARE @t2 DATETIME

IF Object_id('tempdb..#pode_apagar') IS NOT NULL -- Check for table existence
  DROP TABLE #pode_apagar;

SET @t1 = Getdate()
SET @msg = 'obtendo lista de registros para apagar...'

RAISERROR(@msg,0,1) WITH nowait

SELECT cd_sinc_usuario
INTO   #pode_apagar
FROM   log_alteracao_usuario lau
WHERE  EXISTS (SELECT TOP 1 1
               FROM   log_sync_strategy las
               WHERE  lau.cd_usuario = las.cd_usuario
                      AND lau.nm_tabela = las.nm_tabela
                      AND lau.dt_insercao < las.dt_last_sync)

SET @restantes = (SELECT Count(1)
                  FROM   #pode_apagar)
SET @msg = 'total para apagar '
           + Cast(@restantes AS VARCHAR(max)) + ' em '
           + Cast(Datediff(ss, @t1, Getdate()) AS VARCHAR(max))
           + 's'

RAISERROR(@msg,0,1) WITH nowait

SET @r = 1;

WHILE @r > 0
  BEGIN
      BEGIN TRAN

      SET @t2 = Getdate()

      DELETE TOP (50000) lau
      FROM   log_alteracao_usuario lau
      WHERE  EXISTS (SELECT TOP 1 1
                     FROM   #pode_apagar pa
                     WHERE  pa.cd_sinc_usuario = lau.cd_sinc_usuario)

      SET @r = @@ROWCOUNT;
      SET @restantes = @restantes - @r
      SET @msg = 'apagados ' + Cast(@r AS VARCHAR(max))
                 + ' em '
                 + Cast(Datediff(ss, @t2, Getdate()) AS VARCHAR(max))
                 + 's, faltam '
                 + Cast(@restantes AS VARCHAR(max))

      RAISERROR(@msg,0,1) WITH nowait

      COMMIT TRANSACTION;

      CHECKPOINT;
  END

IF Object_id('tempdb..#pode_apagar') IS NOT NULL -- Check for table existence
  DROP TABLE #pode_apagar;

SET @msg = 'finalizado em '
           + Cast(Datediff(ss, @t1, Getdate()) AS VARCHAR(max))
           + 's'

RAISERROR(@msg,0,1) WITH nowait 


  • Scripts para token

select * from  USUARIO u  inner join USUARIO_EMPRESA ue on u.CD_USUARIO = ue.CD_USUARIO
where NM_EMPRESA like 'montanaandersondev'

insert into TOKEN (CD_TOKEN, CD_USUARIO, DT_CRIACAO, DT_EXPIRACAO)
values ('12345', 14178, GETDATE(), '2029-04-10 13:12:50.770')
SELECT * FROM TOKEN

SELECT * FROM USUARIO_EMPRESA WHERE CD_USUARIO = 14178
UPDATE USUARIO_EMPRESA SET PAPEL = 5 WHERE CD_USUARIO = 14178

use bd_ssm_montanaandersondev;

select * from ROTA

select * from bd_ssm_adm..EMPRESA
select * from bd_ssm_adm..empresa_bd_properties where CD_EMPRESA = 17

select * from TUSUARIO;

  • Atalhos para tj2

Endpoints

/api/about/ /importstatus /importstatus/{id} /importstatus-logged /importstatus-logged/{id}

{"PRODUTO_ESTOQUE":[{"id":"-2147483648","cd_produto":"111","cd_estoque":"0","qt_estoque":"999999"}]}

curl http://169.61.109.210:8185/erp-importer/campneushomolog/import -H 'SSAUTH_TOKEN: 123' -H 'Content-type: application/json' -X POST -d @dados.json

{"ROTA":[{"cd_rota":"1","ds_rota":"SEGUNDA-FEIRA","ds_dias_rota":"1","ativa":"1"},{"cd_rota":"2","ds_rota":"TERCA-FEIRA","ds_dias_rota":"1","ativa":"1"}]}

  • Inserir limitação de conexões para um aplicativo com Hikari GS
use bd_ssm_adm;

SELECT * FROM EMPRESA_BD_PROPERTIES WHERE APPNAME = 'SSBATCHES';
SELECT * FROM EMPRESA;


INSERT INTO EMPRESA_BD_PROPERTIES
SELECT 
CD_EMPRESA, 'SSBATCHES', NULL, 2
FROM EMPRESA E 
	INNER JOIN SYS.DATABASES SDBS
		ON ('BD_SSM_' + E.NM_EMPRESA) = SDBS.NAME COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS;
  • Atualizações de quantidades de conexões dos serviços de integração
use bd_ssm_adm;

--ERP-INTEGRATOR
SELECT CAST(CD_EMPRESA AS varchar(5)) + ',' FROM EMPRESA WHERE NM_EMPRESA IN ('pardalsorvetes','wsembalagens','paodahora','lacbom',
'gustamais','futuragrohomolog','mizu','auster','austerhomolog','yama','grupoisdrahomolog','bakerfoods','dicoplasthomolog','iranduba',
'motasa','serveng','fiore','gol','iranduba','lebrinha')

SELECT * FROM EMPRESA_BD_PROPERTIES 
WHERE APPNAME = 'TJ2'
	AND CD_EMPRESA IN (57,421,581,584,590,594,602,603,605,606,607,608,609,610,612,625,629,635,688)

--UPDATE EMPRESA_BD_PROPERTIES SET NR_MAXCOUNT = 15
--WHERE APPNAME = 'TJ2'
--	AND CD_EMPRESA IN (57,421,581,584,590,594,602,603,605,606,607,608,609,610,612,625,629,635,688)

--ERP-IMPORTER
SELECT CAST(CD_EMPRESA AS varchar(5)) + ',' FROM EMPRESA WHERE NM_EMPRESA IN ('campneus','lacbom','lebrinha','mizu')

SELECT * FROM EMPRESA_BD_PROPERTIES 
WHERE APPNAME = 'tj-importer'
	AND CD_EMPRESA IN (549,581,584,609)

UPDATE EMPRESA_BD_PROPERTIES SET NR_MAXCOUNT = 15
WHERE APPNAME = 'tj-importer'
	AND CD_EMPRESA IN (549,581,584,609)

--ERP-IMPORTERNEW
SELECT CAST(CD_EMPRESA AS varchar(5)) + ',' FROM EMPRESA WHERE NM_EMPRESA IN ('montana','montanahomolog')

SELECT * FROM EMPRESA_BD_PROPERTIES 
WHERE APPNAME = 'tj-importernew'
	AND CD_EMPRESA IN (640,641)

UPDATE EMPRESA_BD_PROPERTIES SET NR_MAXCOUNT = 15
WHERE APPNAME = 'tj-importernew'
	AND CD_EMPRESA IN (640,641)

--NEOGRID
SELECT CAST(CD_EMPRESA AS varchar(5)) + ',' FROM EMPRESA WHERE NM_EMPRESA IN ('davene','davenehomolog','casakm','casakmhomolog')

SELECT * FROM EMPRESA_BD_PROPERTIES 
WHERE APPNAME = 'neogrid'
	AND CD_EMPRESA IN (587,599,642,643)

UPDATE EMPRESA_BD_PROPERTIES SET NR_MAXCOUNT = 5
WHERE APPNAME = 'neogrid'
	AND CD_EMPRESA IN (587,599,642,643)
  • Contar quantidade de conexões por serviços
use bd_ssm_adm;

SELECT COUNT(*), sd.name FROM sys.sysprocesses sp
	inner join sys.sysdatabases sd on sp.dbid = sd.dbid
 WHERE program_name LIKE '%tj-importer%' group by sd.name

SELECT COUNT(*), sd.name FROM sys.sysprocesses sp
	inner join sys.sysdatabases sd on sp.dbid = sd.dbid
 WHERE program_name LIKE '%TJ2%' group by sd.name


  • Magia do Jeff
AND DS_OBSERVACAO LIKE '%[^A-Za-z@#$0-9@/_ .,+%!-]%'