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

De GeoSales
Ir para navegação Ir para pesquisar
 
(62 revisões intermediárias por 7 usuários não estão sendo mostradas)
Linha 2: Linha 2:
 
<pre>
 
<pre>
 
netstat -ano | find ":Required port number
 
netstat -ano | find ":Required port number
netstat -ano | find ":25"
+
netstat -ano | find "25"
 +
</pre>
 +
 
 +
:*Cadastro de empresa
 +
<pre>
 +
use bd_ssm_adm;
 +
 
 +
exec sp_cadastra_empresa 'softsite2numobile', '25', 0, 3
 +
exec CADASTRAR_BASE 'softsite2numobile', 'ANDERSON GOMES', 100
 
</pre>
 
</pre>
  
Linha 19: Linha 27:
 
<pre>
 
<pre>
 
EXEC sp_who2 252
 
EXEC sp_who2 252
 +
 +
DBCC inputbuffer(252)
 
</pre>
 
</pre>
 +
 +
:* Detalhar qual processo está rodando a partir de uma execução inicial
 +
<pre>
 +
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);
 +
</pre>
 +
 
:* Ver a query que está sendo executada por um processo (Parâmetro spid)
 
:* Ver a query que está sendo executada por um processo (Parâmetro spid)
 
<pre>
 
<pre>
Linha 48: Linha 66:
 
and name not like '%prontaentrega%'  
 
and name not like '%prontaentrega%'  
 
and name not like '%adm%'  
 
and name not like '%adm%'  
 +
and name not like '%login%'
 +
and name not like '%cpf%'
 +
and name not like '%expressa%'
 +
and name not like '%makitahomolog%'
 +
and name not like '%prodentho_2%'
 +
order by name asc;
 +
</pre>
 +
 +
<pre>
 +
select 'SELECT ''' + name + ''' , COUNT(*) from '+name+'..CLIENTE_COORD_LOG WHERE CAST(DT_LOG AS DATE) >= ''2019-11-19'' AND CAST(DT_LOG AS DATE) <= ''2019-11-19'' 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%'
 +
and name not like '%cpf%'
 
order by name asc;
 
order by name asc;
 +
 +
</pre>
 +
 +
* Pegar usuarios de uma empresa x
 +
<pre>
 +
select * from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%colchobel%'
 
</pre>
 
</pre>
  
 +
* Pegar os dados de login de um usuario no evo
 +
<pre>
 +
 +
select u.login as LOGIN, u.SENHA AS SENHA,
 +
CASE ue.PAPEL
 +
WHEN -1 THEN 'NENHUM'
 +
WHEN 0 THEN 'SUPORTE'
 +
WHEN 1 THEN 'GESTOR'
 +
WHEN 2 THEN 'VENDEDOR'
 +
WHEN 3 THEN 'CLIENTE'
 +
WHEN 4 THEN 'BACKOFFICE'
 +
WHEN 5 THEN 'INTEGRADOR'
 +
END AS PAPEL,
 +
dv.CD_VENDEDOR AS CD_VENDEDOR,
 +
s.CD_SUPERVISOR AS CD_SUPERVISOR
 +
FROM bd_ssm_login..USUARIO_EMPRESA ue inner join bd_ssm_login..usuario u on u.CD_USUARIO = ue.CD_USUARIO
 +
left join tusuario tu on tu.CD_USUARIO = ue.CD_TUSUARIO
 +
left join dados_vendedor dv on dv.CD_USUARIO_SEGURANCA = tu.CD_USUARIO
 +
left join supervisor s on s.CD_USUARIO = tu.CD_USUARIO
 +
WHERE nm_empresa = 'biodinamicanumobile'
 +
 +
GO
 +
select u.*, ue.* FROM bd_ssm_login..USUARIO_EMPRESA ue inner join bd_ssm_login..usuario u on u.CD_USUARIO = ue.CD_USUARIO
 +
WHERE nm_empresa = 'biodinamicanumobile'
 +
GO
 +
</pre>
  
 
:* Checar qual versão determinado vendedor tá usando
 
:* Checar qual versão determinado vendedor tá usando
Linha 491: Linha 559:
  
 
<pre>
 
<pre>
DELETE FROM EMPRESA_SYNC_BD
+
use bd_ssm_adm;
WHERE CD_EMPRESA IN
+
SELECT * FROM EMPRESA WHERE NM_EMPRESA LIKE 'fiorehomolog' --619
(1129)
 
  
DELETE FROM EMPRESA_BD
+
DELETE FROM EMPRESA_SYNC_BD WHERE CD_EMPRESA IN (619)
WHERE CD_EMPRESA IN  
+
DELETE FROM EMPRESA_BD WHERE CD_EMPRESA IN (619)
(1129)
+
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)
  
DELETE FROM EMPRESA_SYNC_SISTEMA
+
USE bd_ssm_login;
WHERE CD_EMPRESA IN
+
SELECT * FROM bd_ssm_login..USUARIO_EMPRESA WHERE NM_EMPRESA LIKE 'fiorehomolog'
(1129)
 
  
DELETE FROM EMPRESA_SISTEMA
+
DELETE FROM MODULO_EMPRESA WHERE CD_EMPRESA IN (619)
WHERE CD_EMPRESA IN  
+
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)
(1129)
+
DELETE FROM USUARIO_EMPRESA WHERE NM_EMPRESA = 'fiorehomolog'
 
 
DELETE FROM EMPRESA
 
WHERE CD_EMPRESA IN  
 
(1129)
 
 
</pre>
 
</pre>
  
Linha 528: Linha 592:
 
inner join sys.sysobjects tb on tr.parent_obj = tb.id and tb.xtype = 'U'
 
inner join sys.sysobjects tb on tr.parent_obj = tb.id and tb.xtype = 'U'
 
where tr.xtype = 'tr'
 
where tr.xtype = 'tr'
 +
and tr.name like 'TR_AUDIT%'
 +
</pre>
 +
<pre>
 +
select ' disable trigger ' + tr.name + ' on ' + tb.name, st.is_disabled  from sys.sysobjects tr
 +
inner join sys.sysobjects tb on tr.parent_obj = tb.id and tb.xtype = 'U'
 +
inner join sys.triggers st on st.object_id = tr.id
 +
where tr.xtype = 'tr' and st.is_disabled = 1
 
and tr.name like 'TR_AUDIT%'
 
and tr.name like 'TR_AUDIT%'
 
</pre>
 
</pre>
Linha 884: Linha 955:
 
INSERT INTO empresa_bd_properties  
 
INSERT INTO empresa_bd_properties  
 
SELECT CD_EMPRESA, 'passwordsenderws', NULL, 2 FROM EMPRESA
 
SELECT CD_EMPRESA, 'passwordsenderws', NULL, 2 FROM EMPRESA
 +
</pre>
 +
 +
*Verificar processo de importação
 +
<pre>
 +
select db_name(dbid), *
 +
from sys.sysprocesses
 +
where program_name like '%Import%'
 +
and db_name(dbid) = 'bd_ssm_boreda'
 +
</pre>
 +
 +
 +
* Analisar base que está dando erro no claudus
 +
<pre>
 +
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;
 +
</pre>
 +
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
 +
* Pesquisar texto dentro das estruturas do banco
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
* Verificar falhas no claudus em todas as bases
 +
 +
<pre>
 +
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;
 +
</pre>
 +
 +
* Analisar vínculos de frete
 +
<pre>
 +
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
 +
</pre>
 +
 +
<pre>
 +
UPDATE TAMOJUNTO_TABELA_FUNCAO SET FL_ATIVA = 1
 +
WHERE FL_ATIVA = 0 AND NM_TABLE NOT IN ('DESCO_GRUP_CLIEN_FAMIL', 'TIPO_PRODUTO_MOVIMENTO')
 +
</pre>
 +
 +
* Aprovar pedidos manualmente.
 +
<pre>
 +
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)
 +
</pre>
 +
 +
*Contagem de licenças
 +
<pre>
 +
 +
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
 +
</pre>
 +
 +
 +
<pre>
 +
 +
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'
 +
 +
</pre>
 +
 +
* Análise de processo de importação
 +
<pre>
 +
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)
 +
</pre>
 +
 +
 +
<pre>
 +
--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 ''
 +
</pre>
 +
 +
* Inserir banners em todas as bases de produção.
 +
<pre>
 +
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 4'', GETDATE(), ''2020-05-30 00:01:00.000'', 2, ''https://sscatalogo.s3.amazonaws.com/marketing/banner_live_evo_3.jpg'', ''https://www.youtube.com/watch?v=0BzRbzEMh9A'', 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%'
 +
and name not like '%cpf%'
 +
and name not like '%dovac%'
 +
order by name desc;
 +
</pre>
 +
 +
* Delete de registros já removidos da log_alteracao_usuario
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
 +
* Scripts para token de
 +
<pre>
 +
 +
use bd_ssm_login;
 +
 +
--INSERIR INICIALMENTE UM USUÁRIO NA TABELA USUARIO DA LOGIN
 +
INSERT INTO USUARIO VALUES
 +
('INTEGRADOR NOMEDAEMPRESA',    'int@nomeempresa',  'integrador@nomeempresa.com.br',    '3+ACVdglI558tfon1MRmVw==', 'SS',  NULL,  0,  1,  NULL,  GETDATE(),  NULL,  0);
 +
 +
--INSERIR UM REGISTRO NA USUARIO_EMPRESA
 +
INSERT INTO USUARIO_EMPRESA VALUES
 +
((SELECT CD_USUARIO FROM USUARIO WHERE NOME = 'INTEGRADOR NOMEDAEMPRESA'), NULL, 'nomedaempresaminusculo', 1, NULL, GETDATE(), 5)
 +
 +
--INSERIR UM TOKEN PARA O USUÁRIO
 +
INSERT INTO TOKEN VALUES
 +
((SELECT SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(40)), '-', ''), 1, 20)),
 +
(SELECT CD_USUARIO FROM USUARIO WHERE NOME = 'INTEGRADOR NOMEDAEMPRESA'),
 +
GETDATE(), '2030-02-06 10:14:00.593')
 +
 +
SELECT * FROM USUARIO WHERE NOME LIKE '%INTEGRADOR NOMEDAEMPRESA%';
 +
SELECT * FROM USUARIO_EMPRESA WHERE CD_USUARIO = 7491
 +
SELECT * FROM TOKEN WHERE CD_USUARIO = 7491
 +
 +
</pre>
 +
 +
<pre>
 +
SELECT * FROM USUARIO_EMPRESA UE
 +
INNER JOIN USUARIO U
 +
ON U.CD_USUARIO = UE.CD_USUARIO
 +
WHERE NM_EMPRESA = 'lorenferhomolog'
 +
AND UE.PAPEL = 5
 +
 +
SELECT * FROM TOKEN WHERE CD_USUARIO = 8353
 +
</pre>
 +
 +
* 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
 +
 +
<pre>
 +
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;
 +
</pre>
 +
 +
* Atualizações de quantidades de conexões dos serviços de integração
 +
<pre>
 +
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)
 +
</pre>
 +
 +
* Contar quantidade de conexões por serviços
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
 +
* Magia do Jeff
 +
<pre>
 +
AND DS_OBSERVACAO LIKE '%[^A-Za-z@#$0-9@/_ .,+%!-]%'
 +
</pre>
 +
 +
* Script de limpeza de registros duplicados.
 +
<pre>
 +
BEGIN TRANSACTION
 +
 +
CREATE TABLE TABELA_TEMP (
 +
    CD_USUARIO INT,
 +
    LONGITUDE DECIMAL(10, 6),
 +
    LATITUDE DECIMAL(10, 6),
 +
    DT_COORD DATETIME,
 +
    PRECISAO INT,
 +
    ORIGEM VARCHAR(2)
 +
)
 +
 +
INSERT INTO TABELA_TEMP
 +
    SELECT DISTINCT CD_USUARIO, LONGITUDE, LATITUDE,DT_COORD, PRECISAO, ORIGEM FROM COORDENADA_RASTREAMENTO ORDER BY DT_COORD ASC;
 +
 +
TRUNCATE TABLE COORDENADA_RASTREAMENTO;
 +
 +
INSERT INTO COORDENADA_RASTREAMENTO (CD_USUARIO, LONGITUDE, LATITUDE, DT_COORD, PRECISAO, ORIGEM)
 +
    SELECT CD_USUARIO, LONGITUDE, LATITUDE,DT_COORD, PRECISAO, ORIGEM FROM TABELA_TEMP ORDER BY DT_COORD ASC;
 +
 +
DROP TABLE TABELA_TEMP;
 +
COMMIT;
 +
</pre>
 +
 +
 +
*Criação de usuários de clientes na makita
 +
 +
<pre>
 +
 +
SELECT * FROM USUARIO_VINCULACAO;
 +
 +
INSERT INTO TGRUPOSUSUARIO (CD_USUARIO, CD_GRUPO)
 +
SELECT CD_USUARIO, 7 FROM TUSUARIO WHERE DS_SENHA = '4ZdOxz2fsGR3xqAJeGo82A=='
 +
 +
INSERT INTO USUARIO_VINCULACAO (CD_TUSUARIO, CD_VINCULADO, CD_TIPO_VINCULADO)
 +
SELECT T.CD_USUARIO, C.CD_CLIENTE, 'C' FROM TUSUARIO T
 +
INNER JOIN  CLIENTE C ON C.NR_CNPJ_CPF = T.NM_GUERRA COLLATE SQL_Latin1_General_CP1_CI_AS
 +
WHERE T.DS_SENHA = '4ZdOxz2fsGR3xqAJeGo82A=='
 +
AND C.CD_CLIENTE IN (13913)
 +
 +
INSERT INTO TUSUARIO (CD_USUARIO,NM_USUARIO,DS_EMAIL,DS_SENHA,ID_SUPER,NM_GUERRA,DT_EXPSENHA,DT_ALTSENHA,NR_VIOLACOES,
 +
CD_SITUACAO,DT_SITUACAO,DS_MOTIVO_SITUACAO,ID_ALT_SENHA_PROX_LOGIN,CD_TPUSUARIO,CD_EMPRESA,CD_FILIAL,ID_USER_SOFTSITE,
 +
ID_ATIVO,IMEI_GPS)
 +
SELECT ((SELECT MAX(CD_USUARIO) FROM TUSUARIO) + ROW_NUMBER() OVER(ORDER BY CD_CLIENTE ASC)) AS CD_USUARIO,
 +
CAST(C.NM_CLIENTE AS VARCHAR(40)) AS NM_USUARIO,
 +
C.DS_EMAIL,
 +
'4ZdOxz2fsGR3xqAJeGo82A==' AS DS_SENHA,
 +
'N' AS ID_SUPER,
 +
C.NR_CNPJ_CPF AS NM_GUERRA,
 +
NULL AS DT_EXPSENHA,
 +
GETDATE() AS DT_ALTSENHA,
 +
0 AS NR_VIOLACOES,
 +
1 AS CD_SITUACAO,
 +
GETDATE() AS DT_SITUACAO,
 +
NULL AS DS_MOTIVO_SITUACAO,
 +
NULL AS ID_ALT_SENHA_PROX_LOGIN,
 +
NULL AS CD_TPUSUARIO,
 +
NULL AS CD_EMPRESA,
 +
NULL AS CD_FILIAL,
 +
'N' AS ID_USER_SOFTSITE,
 +
NULL AS ID_ATIVO,
 +
NULL AS IMEI_GPS
 +
FROM CLIENTE C
 +
WHERE CD_CLIENTE IN (13913) 
 +
AND NOT EXISTS (SELECT TOP 1 1 FROM USUARIO_VINCULACAO UE WHERE C.CD_CLIENTE = UE.CD_VINCULADO)
 +
 +
 +
 +
</pre>
 +
 +
* Visualização de falhas de importação
 +
 +
<pre>
 +
DECLARE  @nomeBanco varchar(100);
 +
 +
DECLARE bancos CURSOR FOR 
 +
    SELECT name
 +
    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%'
 +
and name not like '%cpf%'
 +
and name not like '%expressa%'
 +
and name not like '%makitahomolog%'
 +
and name not like '%prodentho_2%'
 +
 +
OPEN bancos 
 +
 
 +
FETCH NEXT FROM bancos 
 +
INTO @nomeBanco 
 +
 
 +
WHILE @@FETCH_STATUS = 0
 +
BEGIN 
 +
EXEC ('use ' + @nomeBanco + ';' + 'SELECT TOP 1 ''NOME DO BANCO '' + REPLACE(''' + @nomeBanco +''', ''bd_ssm_'','''') , * FROM DW_IMPORTACAO WHERE ISNULL(RESULTADO, ''A'') IN (''F'', ''A'') ORDER BY 4 DESC;');
 +
END 
 +
CLOSE bancos; 
 +
DEALLOCATE bancos;
 +
</pre>
 +
 +
* Configurar base para usar o Claudus V3
 +
<pre>
 +
ALTER TABLE LOG_ITEM_PEDIDO
 +
ADD NR_ITEM_PEDIDO BIGINT
 +
GO
 +
 +
ALTER TABLE LOG_ITEM_PEDIDO_RETORNO
 +
ADD NR_ITEM_PEDIDO BIGINT
 +
 +
GO
 +
 +
ALTER TRIGGER [dbo].[TR_AUDIT_LOG_DELETE_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR DELETE
 +
 +
AS 
 +
DECLARE @TODAY DATETIME 
 +
SET @TODAY = GETDATE() 
 +
 +
INSERT INTO LOG_ITEM_PEDIDO
 +
(
 +
DT_LOG
 +
,ID_KEY
 +
,TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
)
 +
SELECT
 +
@TODAY as DT_LOG
 +
,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY
 +
 +
,'D' as TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
 +
FROM DELETED
 +
 +
GO
 +
 +
ALTER TRIGGER [dbo].[TR_AUDIT_LOG_UPDATE_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR UPDATE
 +
 +
AS 
 +
DECLARE @TODAY DATETIME 
 +
SET @TODAY = GETDATE() 
 +
 +
INSERT INTO LOG_ITEM_PEDIDO
 +
(
 +
DT_LOG
 +
,ID_KEY
 +
,TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
)
 +
SELECT
 +
@TODAY as DT_LOG
 +
,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY
 +
 +
,'U' as TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
 +
FROM INSERTED
 +
 +
GO
 +
 +
ALTER TRIGGER [dbo].[TR_AUDIT_LOG_INSERT_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR INSERT
 +
 +
AS 
 +
DECLARE @TODAY DATETIME 
 +
SET @TODAY = GETDATE() 
 +
 +
INSERT INTO LOG_ITEM_PEDIDO
 +
(
 +
DT_LOG
 +
,ID_KEY
 +
,TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
)
 +
SELECT
 +
@TODAY as DT_LOG
 +
,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY
 +
 +
,'I' as TP_OPERACAO
 +
,CD_PEDIDO_PALM
 +
,NR_ITEM_PEDIDO
 +
,CD_PRODUTO
 +
 +
FROM INSERTED
 +
GO
 +
</pre>
 +
 +
* Consulta para trazer os pedidos auto do geosales3
 +
<pre>
 +
SELECT cd_pedido_cliente [cdPedidoCliente],
 +
    pa.cnpj_cliente [cliente.nrCnpjCpf],
 +
    c.cd_cliente [cliente.cdCliente],
 +
    c.nm_cliente [cliente.nmCliente],
 +
    c.cd_org_venda_padrao [cliente.orgVendaPadrao.cdOrgVenda],
 +
    ov.nm_organizacao [cliente.orgVendaPadrao.nmOrganizacao],
 +
    c.cd_vendedor_padrao  [cliente.vendedorPadrao.codigo],
 +
    v.nm_vendedor [cliente.vendedorPadrao.nome],
 +
    c.cd_tab_preco_padrao [cliente.tabPrecoPadrao.cdTabPreco],
 +
    tp.ds_tab_preco [cliente.tabPrecoPadrao.dsTabPreco],
 +
    c.nm_estado          [cliente.enderecoPadrao.nmEstado],
 +
    c.cd_cond_pgto_padrao [cliente.condPgtoPadrao.cdCondPgto],
 +
    cp.ds_cond_pgto [cliente.condPgtoPadrao.dsCondPgto],
 +
    c.cd_meio_pgto_padrao [cliente.meioPagamentoPadrao.cdMeioPgto],
 +
        mp.ds_meio_pgto      [cliente.meioPagamentoPadrao.dsMeioPgto],
 +
    cnpj_fornecedor [cnpjFornecedor],
 +
    dt_emissao [dataEmissaoStr],
 +
    cp.cd_cond_pgto [condicaoPagamento.cdCondPgto],
 +
    cp.ds_cond_pgto [condicaoPagamento.dsCondPgto],
 +
    cp.pr_desconto [condicaoPagamento.prDescontoStr],
 +
    dt_vencimento [dataVencimentoStr],
 +
    cd_tipo_frete [frete.idTipoFrete],
 +
    motivo_bonificacao [motivoBonificacao],
 +
    dt_entrega [dataEntregaStr],
 +
    obs_pedido [observacaoPedido],
 +
    pa.cd_tipo_pedido [tipoPedido.codTipo],
 +
    tmp.ds_tipo [tipoPedido.descTipo],
 +
    id_utilizado [idUtilizadoStr]
 +
FROM  pedido_auto pa
 +
INNER JOIN cliente c ON pa.cnpj_cliente = c.nr_cnpj_cpf
 +
INNER JOIN organizacao_venda ov ON c.cd_org_venda_padrao = ov.cd_org_venda
 +
INNER JOIN vendedor v ON c.cd_vendedor_padrao = v.cd_vendedor
 +
INNER JOIN tabela_preco tp ON c.cd_tab_preco_padrao = tp.cd_tab_preco
 +
INNER JOIN condicao_pagamento cp ON c.cd_cond_pgto_padrao = cp.cd_cond_pgto
 +
INNER JOIN meio_pagamento mp ON mp.cd_meio_pgto = c.cd_meio_pgto_padrao
 +
INNER JOIN tipo_movimento_pedido tmp ON pa.cd_tipo_pedido = tmp.cd_tipo
 +
WHERE ( EXISTS ( SELECT TOP 1 1
 +
  FROM Fn_obter_cliente_usuario(#usuario.codigo#) fn
 +
  WHERE ( fn.cd_cliente = c.cd_cliente )
 +
)
 +
  ) AND pa.id_utilizavel = 'S' AND id_utilizado = 'N'
 +
</pre>
 +
 +
* Scripts de análise de configuração do novo aplicativo de rastreamento
 +
<pre>
 +
--CONFIGURACAO
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_BASE_URL%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_CAPTURAR_LOG%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_FUNCTION_MODE%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_HOUR_START%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_HOUR_FINISH%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_LOGGED_APP%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_MIN_DISTANCE%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_N_TRY%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_NUMERO_ENVIAR_LOG%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_NUMERO_INSERIR_LOG%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_SLEEP_TRY%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_STOP_SERVICE_PERMISSION%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_TIMER_BATTERY%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_TRIANGULATION_ACTIVE%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_VIEW_CONFIGURATION%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%SSWM_ID_GPS%'
 +
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%SSWM_ID_LOCK%'
 +
 +
--IMEI USUARIO
 +
SELECT IMEI_GPS, * FROM TUSUARIO WHERE CD_USUARIO = 181 --358692106755103
 +
--VENDEDOR DE ANÁLISE
 +
SELECT IMEI, * FROM DADOS_VENDEDOR WHERE CD_VENDEDOR = 37; --358692106755103
 +
--VERIFICAR STATUS DO GPS
 +
SELECT * FROM GPS_STATUS WHERE CD_USUARIO = 181 order by 3 desc;
 +
--VERIFICAR COORDENADAS
 +
SELECT * FROM COORDENADA_RASTREAMENTO WHERE CD_USUARIO = 181 order by 5 desc
 +
 +
 +
--teste
 +
SELECT * FROM bd_ssm_webinargeosales..GPS_STATUS WHERE CD_USUARIO = 155 order by 3 desc;
 +
SELECT * FROM bd_ssm_webinargeosales..COORDENADA_RASTREAMENTO WHERE CD_USUARIO = 155 ORDER BY 5 DESC;
 +
 +
 +
 +
 +
--GPS STATUS
 +
--A - ATIVO - (GPS OU INTERNET)
 +
--D - DESATIVADO - (GPS OU INTERNET)
 +
--C - DESTRUIÇÃO DO SERVIÇO DE CONFIGURACAO
 +
--R - DESTRUIÇÃO DO SERVIÇO DE RASTREAMENTO
 +
 +
</pre>
 +
 +
* Achar tabelas que tem a coluna Y
 +
<pre>
 +
select SO.NAME, * from sys.columns SC
 +
INNER JOIN sys.objects SO
 +
ON SC.object_id = SO.object_id where SC.name like '%cd_org_venda%'
 +
and type = 'U'
 +
</pre>
 +
 +
* Migrar imagens de catálogo para produto imagem no evo
 +
 +
<pre>
 +
BEGIN TRANSACTION
 +
 +
DECLARE @Imagens TABLE(DESC_FOTO VARCHAR(100), URL VARCHAR(1000), ID_ATIVO bit)
 +
DECLARE @ProdutoImagens TABLE(CD_PRODUTO INT, CD_IMAGEM INT, ID_PRINCIPAL CHAR(1), ID_ATIVO BIT)
 +
INSERT INTO @Imagens
 +
SELECT DISTINCT DS_FOTO, DS_URL, 1 FROM CATALOGO_FOTO;
 +
 +
INSERT INTO IMAGEM
 +
SELECT ROW_NUMBER() OVER(ORDER BY DESC_FOTO ASC), DESC_FOTO, URL, ID_ATIVO FROM @Imagens;
 +
 +
INSERT INTO @ProdutoImagens
 +
SELECT CF.CD_PRODUTO, I.CD_IMAGEM, CF.ID_PRINCIPAL, 1 FROM
 +
IMAGEM I
 +
INNER JOIN CATALOGO_FOTO CF
 +
ON I.URL_IMAGEM  = CF.DS_URL
 +
WHERE CD_PRODUTO IS NOT NULL
 +
 +
INSERT INTO PRODUTO_IMAGEM
 +
SELECT DISTINCT CD_PRODUTO, CD_IMAGEM, ID_PRINCIPAL, ID_ATIVO FROM
 +
@ProdutoImagens
 +
COMMIT;
 +
</pre>
 +
 +
* VERIFICAR PORQUE O PRODUTO NÃO APARECE PRO CLIENTE APÓS O PREENCHIMENTO DO CABEÇALHO
 +
<pre>
 +
--consulta que traz os pedido quando multiplos estoques está ativado
 +
SELECT
 +
p.cd_produto,*
 +
FROM fn_obter_produtos_com_paginacao('0101089', 2,
 +
38, null) pot
 +
INNER JOIN produto p WITH(NOLOCK) ON pot.cd_produto = p.cd_produto
 +
 +
--INNER JOIN familia_produto fp ON p.cd_familia = fp.cd_familia AND fp.cd_familia = #{familia.key}
 +
 +
INNER JOIN lista_produto lp WITH(NOLOCK) ON (lp.cd_produto = pot.cd_produto AND lp.cd_org_venda = pot.cd_org_venda AND lp.cd_tab_preco = pot.cd_tab_preco)
 +
where
 +
EXISTS (
 +
SELECT 1 FROM produto_estoque pe
 +
WHERE
 +
pe.cd_produto = p.cd_produto AND pe.cd_estoque = 200
 +
)
 +
 +
ORDER BY p.nm_produto OFFSET 0 ROWS FETCH NEXT 18 ROWS ONLY
 +
 +
--funcão de paginação
 +
CREATE FUNCTION [dbo].[fn_obter_produtos_com_paginacao] (
 +
@cdOrgVenda VARCHAR(20),
 +
@cdTabPreco INT,
 +
@cdCliente INT,
 +
@param VARCHAR(100))
 +
RETURNS TABLE
 +
AS
 +
RETURN (
 +
WITH org_venda AS (
 +
SELECT
 +
ov.cd_org_venda,
 +
ovc.cd_cliente,
 +
ov.cd_estoque,
 +
 +
ovc.cd_tab_preco
 +
FROM organizacao_venda ov WITH(NOLOCK)
 +
INNER JOIN org_venda_cliente ovc WITH(NOLOCK) ON ov.cd_org_venda = ovc.cd_org_venda
 +
WHERE ov.cd_org_venda = @cdOrgVenda AND ovc.cd_tab_preco = @cdTabPreco
 +
AND ovc.cd_cliente = @cdCliente
 +
 +
), produto_organizacao_tabela AS (
 +
SELECT
 +
p.cd_produto,
 +
p.nm_produto,
 +
ov.cd_cliente,
 +
ov.cd_org_venda,
 +
ov.cd_estoque,
 +
ov.cd_tab_preco
 +
FROM produto p WITH(NOLOCK)
 +
CROSS JOIN org_venda ov WITH(NOLOCK)
 +
WHERE (
 +
(@param IS NULL)
 +
OR
 +
(p.nm_produto LIKE '%' + @param + '%'
 +
OR p.cd_produto LIKE '%' + @param + '%'
 +
OR p.cd_referencia LIKE '%' + @param + '%'
 +
OR p.cod_barras LIKE '%' + @param + '%'
 +
OR p.cd_ncm LIKE '%' + @param + '%')
 +
)
 +
)
 +
 +
SELECT
 +
p.cd_pr
 +
oduto,
 +
pot.cd_org_venda,
 +
pot.cd_tab_preco,
 +
pot.cd_estoque
 +
FROM  produto_organizacao_tabela pot
 +
INNER JOIN produto p WITH(NOLOCK) ON pot.cd_produto = p.cd_produto
 +
)
 +
 +
 +
</pre>
 +
 +
* Remover usuários inválidos de uma base mssql
 +
<pre>
 +
 +
declare @db varchar(50)
 +
declare @cont int
 +
declare @usuariodb varchar(50)
 +
declare @cmd varchar (200)
 +
--set @db = (SELECT '?' AS db_name)
 +
--print @db
 +
create table ##usuariobd (cod int primary key identity, nome_usuario varchar (50), nome_login
 +
varchar(50))
 +
insert into ##usuariobd
 +
select su.name, sl.name--, db_name()
 +
from [dbo].[sysusers] su
 +
left join sys.syslogins sl on su.sid = sl.sid
 +
where su.uid > 4
 +
and su.name not like 'db_%'
 +
and su.name <> 'MS_DataCollectorInternalUser'
 +
and issqlrole <> 1
 +
and sl.name is null
 +
order by 1
 +
set @cont = (select MAX(cod) from ##usuariobd)
 +
while @cont >0
 +
begin
 +
set @usuariodb = (select nome_usuario from ##usuariobd where cod = @cont)
 +
IF EXISTS (SELECT SCHEMA_ID FROM sys.schemas WHERE [name] = @usuariodb)
 +
BEGIN
 +
print 'Deletando Schema ' + @usuariodb
 +
set @cmd = 'drop schema [' + @usuariodb + ']'
 +
print @cmd
 +
exec (@cmd)
 +
END
 +
print 'Deletando usuário '+ @usuariodb + '!'
 +
set @cmd= 'drop user [' + @usuariodb + ']'
 +
exec (@cmd)
 +
set @cont = @cont -1
 +
end
 +
drop table ##usuariobd
 +
</pre>
 +
 +
* Pegar dados servidor de banco de dados
 +
<pre>
 +
SELECT @@SERVERNAME,
 +
CONNECTIONPROPERTY('net_transport') AS net_transport,
 +
CONNECTIONPROPERTY('protocol_type') AS protocol_type,
 +
CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
 +
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
 +
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
 +
CONNECTIONPROPERTY('client_net_address') AS client_net_address
 +
</pre>
 +
 +
* Agregador de dados
 +
<pre>
 +
SELECT c.cd_cliente, STRING_AGG(r.DS_ROTA, ', ')
 +
FROM cliente c
 +
LEFT JOIN CLIENTE_ROTA cr on c.CD_CLIENTE = cr.CD_CLIENTE
 +
LEFT JOIN ROTA r on r.CD_ROTA = cr.CD_ROTA
 +
GROUP BY c.cd_cliente
 +
</pre>
 +
 +
* Script para validar se o pedido pode ser copiado
 +
 +
<pre>
 +
SELECT
 +
-- pedido
 +
P.cd_pedido_palm          AS [cdPedidoPalm],
 +
P.dt_emissao              AS [dtEmissao],
 +
P.dt_vencimento            AS [dtVencimento],
 +
P.cd_pedido_cliente        AS [cdPedidoCliente],
 +
P.cd_pedido                AS [cdPedido],
 +
P.dt_entrega              AS [dtEntrega],
 +
P.dt_faturamento          AS [dtFaturamento],
 +
P.dt_entrega_calculada    AS [dtEntregaCalculada],
 +
P.id_prioridade            AS [idPrioridade],
 +
P.ds_observacao            AS [observacao],
 +
P.ds_obs_frete            AS [observacaoFrete],
 +
P.ds_observacao_nf        AS [observacaoNotaFiscal],
 +
P.nm_rz_social_entr        AS [nmRazaoSocialEntrega],
 +
P.nr_cnpj_cpf_entr        AS [cpfCnpjEntrega],
 +
P.nr_cgf_entr              AS [cgfEntrega],
 +
P.nm_responsavel          AS [nomeResponsavel],
 +
P.id_orcamento            AS [orcamento],
 +
P.cd_rota                  AS [cdRota],
 +
P.id_efetivado            AS [efetivado],
 +
P.pc_desconto              AS [pcDesconto],
 +
P.id_cross_docking        AS [crossDocking],
 +
P.pc_desc_bonif            AS [pcDescBonif],
 +
P.vr_outros_descontos      AS [outrosDescontos],
 +
P.vr_frete_manual          AS [vrFreteManual],
 +
P.vr_frete_manual_original AS [vrFreteManualOriginal],
 +
P.acrescimo_dias          AS [acrescimoDias],
 +
P.qt_quilometros_entrega  AS [qtQuilometrosEntrega],
 +
P.qt_quilometros_cobranca  AS [qtQuilometrosCobranca],
 +
-- cliente -->
 +
C.cd_cliente                AS [cliente@cdCliente],
 +
C.cd_aprovacao              AS [cliente@cdAprCliente],
 +
CASE WHEN
 +
C.origem = 'CLIENTE_APROVACAO' THEN 1
 +
ELSE 0
 +
END                        AS [cliente@isProspect],
 +
-- organizacao venda
 +
OV.cd_org_venda AS [orgVenda@cdOrgVenda],
 +
-- tipo pedido
 +
TMP.cd_tipo                AS [tipoPedido@codTipo],
 +
-- vendedor
 +
V.cd_vendedor              AS [vendedor@codigo],
 +
-- tabela preco
 +
TP.cd_tab_preco            AS [tabPreco@cdTabPreco],
 +
-- estoque
 +
P.cd_estoque                AS [estoque@cdEstoque],
 +
-- canal de venda
 +
p.cd_canal                  AS [canalVenda@codigo],
 +
-- meio pagamento
 +
P.cd_meio_pgto     AS [meioPagamento@cdMeioPgto],
 +
-- meio pagamento secundario
 +
P.cd_meio_pgto_sec AS [meioPgtoSecundario@cdMeioPgto],
 +
-- cond. pgto
 +
P.cd_cond_pgto              AS [condPgto@cdCondPgto],
 +
-- cond. pgto secundario
 +
P.cd_cond_pgto_sec AS [condPgtoSecundario@cdCondPgto],
 +
-- tipo frete
 +
P.id_tipo_frete            AS [tipoFrete@idTipoFrete],
 +
-- transportadora
 +
P.cd_transportadora AS [transportadora@codigo],
 +
-- transportadora auxiliar
 +
p.cd_transportadora_auxiliar AS [transportadoraAuxiliar@codigo],
 +
-- situacao pedido
 +
SP.cd_st_pedido AS [situacaoPedido@cdStPedido],
 +
SP.ds_st_pedido     AS [situacaoPedido@dsStPedido],
 +
-- pedido pai
 +
PPAI.cd_pedido_palm        AS [pedidoPaiDTO@cdPedidoPalm],
 +
PPAI.dt_emissao            AS [pedidoPaiDTO@dtEmissao],
 +
PPAI.vr_pedido_impostos    AS [pedidoPaiDTO@vrPedidoImpostos],
 +
-- endereco entrega
 +
P.cd_endereco_entrega      AS [enderecoEntrega@cdEndereco],
 +
P.ds_endereco_entr          AS [enderecoEntrega@dsEndereco],
 +
P.nm_bairro_entr            AS [enderecoEntrega@nmBairro],
 +
P.nm_cidade_entr            AS [enderecoEntrega@nmCidade],
 +
P.nm_estado_entr            AS [enderecoEntrega@nmEstado],
 +
P.nr_cep_entr              AS [enderecoEntrega@nrCep],
 +
P.nr_fone_entr              AS [enderecoEntrega@nrTelefone],
 +
P.nr_cnpj_cpf_entr          AS [enderecoEntrega@nrCnpjCpf],
 +
-- endereco cobranca
 +
P.cd_endereco_cobranca      AS [enderecoCobranca@cdEndereco],
 +
P.ds_endereco_cobr          AS [enderecoCobranca@dsEndereco],
 +
P.nm_bairro_cobr            AS [enderecoCobranca@nmBairro],
 +
P.nm_cidade_cobr            AS [enderecoCobranca@nmCidade],
 +
P.nm_estado_cobr            AS [enderecoCobranca@nmEstado],
 +
P.nr_cep_cobr              AS [enderecoCobranca@nrCep],
 +
P.nr_fone_cobr              AS [enderecoCobranca@nrTelefone],
 +
P.nr_cnpj_cpf_cobr          AS [enderecoCobranca@nrCnpjCpf],
 +
-- pedido informacao extra
 +
PIEXT.cd_inf                AS [pedInfoExtra@cdInf],
 +
PIEXT.ds_inf                AS [pedInfoExtra@dsLabel],
 +
PIEXT.cd_tipo_inf          AS [pedInfoExtra@cdTipoInf],
 +
PIEXT.ds_livre_inf          AS [pedInfoExtra@dsLivreInf],
 +
-- tramitacao_pedido
 +
trp.cd_pedido_palm AS [tramitacaoPedido@cdPedidoPalm],
 +
trp.cd_pedido_palm AS [tramitacaoPedido@pedido@cdPedidoPalm],
 +
trp.cd_tramitacao AS [tramitacaoPedido@tramitacao@cdTramitacao],
 +
tram.ds_tramitacao AS [tramitacaoPedido@tramitacao@dsTramitacao],
 +
trp.ds_observacao AS [tramitacaoPedido@dsObservavao],
 +
trp.dt_tramitacao AS [tramitacaoPedido@dtTramitacao],
 +
trp.cd_usuario     AS [tramitacaoPedido@usuarioSistema@codigo],
 +
    -- tramitacao_pedido
 +
    P.cd_motivo_pedido AS [motivoPedido@cdMotivoPedido],
 +
    mot.ds_motivo_pedido AS [motivoPedido@dsMotivoPedido]
 +
FROM vw_pedidos P
 +
INNER JOIN (SELECT cd_cliente, nm_cliente, cd_aprovacao, origem FROM vw_clientes) C on (P.cd_cliente = C.cd_cliente)
 +
INNER JOIN (SELECT cd_org_venda, nm_organizacao FROM organizacao_venda WITH (NOLOCK)) OV ON P.cd_org_venda = OV.cd_org_venda
 +
INNER JOIN (SELECT id_tipo_pedido, cd_tipo, ds_tipo FROM tipo_movimento_pedido) TMP on (P.cd_tipo_pedido = TMP.cd_tipo)
 +
INNER JOIN (SELECT cd_vendedor, nm_vendedor FROM vendedor) V ON P.cd_vendedor = V.cd_vendedor
 +
INNER JOIN tabela_preco TP ON P.cd_tab_preco = TP.cd_tab_preco
 +
LEFT JOIN situacao_pedido sp ON P.cd_st_pedido = sp.cd_st_pedido
 +
LEFT JOIN (SELECT cd_pedido_palm, dt_emissao, vr_pedido_impostos FROM vw_pedidos WITH(NOLOCK)) ppai ON P.cd_pedido_palm_pai = ppai.cd_pedido_palm
 +
LEFT JOIN vw_pedidos_informacoes_extras PIEXT ON P.cd_pedido_palm = PIEXT.cd_pedido_palm
 +
LEFT JOIN vw_tramitacoes_pedidos trp WITH(NOLOCK) ON P.cd_pedido_palm = trp.cd_pedido_palm
 +
LEFT JOIN tramitacao tram ON trp.cd_tramitacao = tram.cd_tramitacao
 +
LEFT JOIN motivo_pedido mot ON mot.cd_motivo_pedido = P.cd_motivo_pedido
 +
WHERE
 +
P.cd_pedido_palm = 20063013102232739
 +
AND (
 +
(
 +
(P.origem = 'PEDIDO_RETORNO' OR P.origem = 'PEDIDO')
 +
AND EXISTS (
 +
-- org_venda_cliente
 +
SELECT TOP 1 1 FROM org_venda_cliente OVC
 +
WHERE
 +
P.cd_org_venda = OVC.cd_org_venda
 +
AND P.cd_cliente = OVC.cd_cliente
 +
AND P.cd_vendedor = OVC.cd_vendedor
 +
AND P.cd_tab_preco = OVC.cd_tab_preco
 +
 +
)
 +
)
 +
OR
 +
(
 +
P.origem = 'PEDIDO_APROVACAO'
 +
AND EXISTS (
 +
-- parametros_cliente_prospect
 +
SELECT TOP 1 1 FROM parametros_venda_prospect PCP
 +
WHERE
 +
P.cd_org_venda = PCP.cd_org_venda
 +
AND P.cd_vendedor = PCP.cd_vendedor
 +
AND P.cd_tab_preco = PCP.cd_tab_preco
 +
)
 +
)
 +
)
 +
 +
 +
 +
</pre>
 +
 +
* Script para criar um usuário com todos os acessos no EVO/NuPortal
 +
 +
<pre>
 +
-- __  __  __          __  ___  __ 
 +
--/ _` /  \ |  \    |  | /__` |__  |__)
 +
--\__> \__/ |__/    \__/ .__/ |___ |  \
 +
                                   
 +
 +
-- 1º utilize a base desejada e insira o nome da empresa em @nm_empresa
 +
use bd_ssm_biodinamicajucianodev
 +
DECLARE @nm_empresa VARCHAR(200) = 'biodinamicajucianodev'
 +
 +
-- 2º escolha um nome(novo ou já existente) para o perfil que terá acesso a tudo, este nome também será a senha para o portal EVO.
 +
DECLARE @nm_new_perfil VARCHAR(100) = 'dog'
 +
 +
-- 3º Escolha um usuário da base escolhida que não exista na USUARIO_PERFIL através da query abaixo.
 +
-- Observe que a consulta utiliza as variáveis acima para funcionar, então selecione-as ao executá-la.
 +
SELECT DISTINCT (u.cd_usuario), ue.cd_tusuario, u.nome, u.login, u.email, u.senha, u.salt, u.dt_criacao, u.dt_validade, u.valido FROM bd_ssm_login..usuario u
 +
INNER JOIN bd_ssm_login..usuario_empresa ue ON u.cd_usuario = ue.cd_usuario
 +
INNER JOIN perfil_usuario pu ON pu.cd_usuario !=  u.cd_usuario
 +
WHERE (ue.nm_empresa LIKE '%'+ @nm_empresa +'%' OR u.login LIKE '%'+ @nm_empresa +'%')
 +
--  AND ue.papel = 2
 +
--  AND u.login like '%jbonatto%'
 +
--  AND u.cd_usuario = 28607
 +
--  AND ue.cd_tusuario IN (170, 205)
 +
 +
--PAPÉIS:
 +
--NENHUM(-1)
 +
--SUPORTE(0)
 +
--GESTOR(1)
 +
--VENDEDOR(2)
 +
--CLIENTE(3)
 +
--BACKOFFICE(4)
 +
--INTEGRADOR(5)
 +
 +
-- 5º Substitua NULL pelo bd_ssm_login..cd_usuario escolhido em @cdUsuario_dog. o Script só executará se a variável @cdUsuario_dog estiver diferente de NULL
 +
DECLARE @cdUsuario_dog INT = NULL;
 +
-- Porque dog? Dog invertido fica god, que dá o sentido de god user.
 +
 +
-- 6º Após os passos acima, verifique se as variáveis acima (@nm_empresa, @nm_new_perfil, @cdUsuario_dog) estão com os valores corretos.
 +
 +
-- 7º Execute todo este script. Se estiver no Microsoft SQL Server Management Studio apenas pressione F5.
 +
-- Se tudo ocorrer bem você visualizará o usuário escolhido no último select resultante deste script.
 +
 +
-- Após executá-lo não pare o script, pois isso pode gerar um processo travado/bloqueado.
 +
 +
DECLARE @cd_perfil_already_exists INT = (SELECT CD_PERFIL FROM PERFIL WHERE NM_PERFIL = @nm_new_perfil)
 +
 +
BEGIN TRANSACTION
 +
BEGIN TRY
 +
IF (@cdUsuario_dog IS NOT NULL
 +
AND @nm_new_perfil IS NOT NULL
 +
AND @nm_new_perfil <> ''
 +
AND (SELECT DB_NAME()) = 'bd_ssm_' + @nm_empresa
 +
AND NOT EXISTS (SELECT TOP 1 1 FROM PERFIL_USUARIO WHERE CD_USUARIO = @cdUsuario_dog)
 +
)
 +
BEGIN
 +
DECLARE @I INT = 1
 +
DECLARE @cdPerfilChoosed INT;
 +
DECLARE @cdAcaoTemp INT;
 +
 +
--Decidindo o perfil a ser usado
 +
IF(@cd_perfil_already_exists IS NULL)
 +
BEGIN
 +
INSERT INTO PERFIL(
 +
CD_PERFIL,
 +
NM_PERFIL
 +
) VALUES (
 +
(SELECT ISNULL((SELECT MAX(CD_PERFIL) FROM PERFIL), 1) + 1),
 +
@nm_new_perfil
 +
)
 +
SET @cdPerfilChoosed = (SELECT CD_PERFIL FROM PERFIL WHERE NM_PERFIL = @nm_new_perfil)
 +
END
 +
ELSE
 +
BEGIN
 +
SET @cdPerfilChoosed = @cd_perfil_already_exists
 +
END
 +
 +
--Vinculando usuário a um perfil
 +
INSERT INTO PERFIL_USUARIO (CD_PERFIL, CD_USUARIO)
 +
VALUES (@cdPerfilChoosed, @cdUsuario_dog)
 +
 +
--Inserindo ações para o perfil escolhido
 +
 +
DECLARE @acoes TABLE(
 +
CD_RANK INT,
 +
CD_ACAO INT
 +
)
 +
 +
;WITH acoes AS(
 +
SELECT
 +
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rk,
 +
CD_ACAO
 +
FROM BD_SSM_LOGIN..ACAO
 +
WHERE ID_ACAO NOT LIKE '%OCULTA%' AND ID_ACAO <> 'HABILITAR_MULT_FILIAIS_ESTOQUE_PEDIDO'
 +
) INSERT INTO @acoes SELECT rk, CD_ACAO from acoes
 +
 +
DECLARE @LENGHT INT = (SELECT count(*) FROM BD_SSM_LOGIN..ACAO WHERE ID_ACAO NOT LIKE '%OCULTA%' AND ID_ACAO <> 'HABILITAR_MULT_FILIAIS_ESTOQUE_PEDIDO')
 +
 +
WHILE (@I < @LENGHT)
 +
BEGIN
 +
 +
SET @cdAcaoTemp = (SELECT CD_ACAO FROM @acoes WHERE CD_RANK = @I)
 +
 +
IF NOT EXISTS ((SELECT TOP 1 1 FROM ACAO_PERFIL WHERE CD_PERFIL = @cdPerfilChoosed AND CD_ACAO = @cdAcaoTemp))
 +
BEGIN
 +
INSERT INTO ACAO_PERFIL(CD_ACAO, CD_PERFIL)
 +
VALUES ((SELECT CD_ACAO FROM @acoes WHERE CD_RANK = @I) , @cdPerfilChoosed)
 +
END
 +
SET @I += 1;
 +
END
 +
 +
IF (SELECT salt FROM BD_SSM_LOGIN..USUARIO U where cd_usuario = @cdUsuario_dog) != 'PLAIN'
 +
BEGIN
 +
UPDATE bd_ssm_Login..usuario SET SALT = 'PLAIN', SENHA = @nm_new_perfil where cd_usuario = @cdUsuario_dog
 +
END
 +
SELECT 'Abaixo terá as informações de login EVO.' AS 'SEU GOD USER FOI CRIADO COM SUCESSO!'
 +
SELECT u.LOGIN, u.SENHA, u.SALT, U.CD_USUARIO, UE.CD_TUSUARIO, p.NM_PERFIL, * FROM BD_SSM_LOGIN..USUARIO U
 +
INNER JOIN bd_ssm_login..USUARIO_EMPRESA UE ON U.CD_USUARIO = UE.CD_USUARIO
 +
INNER JOIN PERFIL_USUARIO PU ON PU.CD_USUARIO = U.CD_USUARIO
 +
INNER JOIN PERFIL P ON P.CD_PERFIL = PU.CD_PERFIL
 +
WHERE u.CD_USUARIO = @cdUsuario_dog
 +
END
 +
ELSE
 +
BEGIN
 +
SELECT 'DADOS EQUIVOCADOS, BASE DIVERGENTE OU JÁ EXISTE ESTE USUÁRIO NA USUARIO_PERFIL'
 +
END
 +
COMMIT;
 +
END TRY
 +
BEGIN CATCH
 +
SELECT 'ROLLBACK, WE HAVE A PROBLEM  -> ' + ERROR_MESSAGE()
 +
ROLLBACK
 +
END CATCH
 +
</pre>
 +
 +
* Script de auxílio para análise da aprovação de pendências no item do pedido
 +
 +
<pre>
 +
--Script de auxílio para análise da aprovação de pendências no item do pedido
 +
 +
-- Preencha estas 2 variáveis
 +
DECLARE @cdPedidoPalm BIGINT = 200729124209337,
 +
@cdTUsuario INT = 168
 +
 +
DECLARE @cdGestor INT = (SELECT cd_supervisor FROM supervisor WHERE cd_usuario = @cdTUsuario)
 +
 +
IF (@cdGestor IS NULL)
 +
BEGIN
 +
SELECT 'é necessário que o usuário seja um gestor/supervisor para aprovar pendências'
 +
RETURN
 +
END
 +
--Caso você queira analisar o retorno ou a própria procedure que simula o click do botão aprovar pendências ela está logo abaixo:
 +
--Analisando a procedure:
 +
--Utilize sp_helptext com os resultados em modo Texto(CTRL + T) no lugar do EXEC para analisar a procedure.
 +
--Ou melhor, vá em nome_da_sua_base --> Programação --> Procedimentos Armazenados
 +
--> dbo.PR_AUTORIZAR_PENDENCIA
 +
--> Botão direito Modificar
 +
--> comente a linha que começa com Alter para não alterar a procedure sem querer
 +
 +
--Executando
 +
--CUIDADO: O Script logo abaixo possui uma linha que executa uma procedure com comandos DML e sua execução realmente aprovará o pedido caso o usuário tenha tudo nos conformes.
 +
 +
--INÍCIO
 +
--DECLARE @pendenciaPedido TP_PENDENCIA_PEDIDO;
 +
 +
--INSERT INTO @pendenciaPedido (
 +
-- cd_pedido_palm,
 +
-- cd_tipo_bloc,
 +
-- cd_usuario,
 +
-- cd_gestor
 +
--)
 +
--SELECT
 +
-- @cdPedidoPalm,
 +
-- tbpr.cd_tipo_bloc,
 +
-- @cdTUsuario  AS cd_usuario,
 +
-- @cdGestor AS cd_gestor
 +
--from PEDIDO P
 +
--INNER JOIN tipo_bloc_pedido_rel tbpr WITH(NOLOCK) ON tbpr.cd_pedido_palm = P.cd_pedido_palm
 +
--INNER JOIN tipo_bloc_pedido_sit tbps WITH (NOLOCK) ON tbps.cd_tipo_bloc = tbpr.cd_tipo_bloc
 +
 +
--CUIDADO_2: O Script logo abaixo possui comandos DML e sua execução realmente aprovará o pedido caso o usuário tenha tudo nos conformes.
 +
-- -- EXEC PR_AUTORIZAR_PENDENCIA @pendenciaPedido
 +
 +
--FIM
 +
 +
--PENDENCIAS_AUTORIZADAS(1)
 +
--PEDIDO_AUTORIZADO(2)
 +
--SEM_ALCADA_JULGAR_PENDENCIA(3)
 +
--PENDENCIA_JA_JULGADA(4)
 +
--PEDIDO_CANCELADO(5)
 +
 +
--Caso o número retornado não esteja entre estes acima é porque esta funcionalidade sofreu alteração, logo, parte deste script poderá não ser mais útil.
 +
 +
--Se você reconhecer que o retorno do NuPortal ou da Procedure for (3) 'SEM_ALCADA_JULGAR_PENDENCIA', você pode analisar o porquê deste retorno com as instruções abaixo:
 +
 +
--Analisando o porquê do retorno SEM_ALCADA_JULGAR_PENDENCIA(3)
 +
 +
DECLARE @nrItemPedido BIGINT = 3
 +
 +
--Verificando se o usuário pode aprovar a pendência do item via função. Essa
 +
--SELECT [dbo].[FN_AUTORIZA_ITEM_PEDIDO_PENDENTE] (@cdPedidoPalm, @nrItemPedido, @cdGestor)
 +
 +
--Conteúdo da função, se por ventura você não pode simplemente executá-la e/ou quer entender melhor o que está acontecendo nela
 +
--Obs: Ele utiliza as variáveis declaradas lá em cima:
 +
 +
--INÍCIO
 +
DECLARE @aprovavel CHAR(1)
 +
SELECT
 +
TMP.id_tipo_pedido,
 +
CASE
 +
WHEN TMP.id_tipo_pedido = 'BS' THEN
 +
CASE WHEN
 +
(
 +
(VPAPP.percentual_acrescimo_saldo <= VAP.pct_desc_original OR
 +
(VPAPP.percentual_acrescimo_saldo IS NOT NULL AND VAP.pct_desc_original = 100) )
 +
AND ISNULL(VAP.pct_desc_min,0) <= VPAPP.percentual_acrescimo_saldo
 +
)
 +
THEN 'S' ELSE 'N' END
 +
WHEN TMP.id_tipo_pedido = 'BO' THEN
 +
CASE WHEN
 +
((TMP.id_tipo_pedido = 'BO' AND VSV.nivel_supervisor = 0) OR NOT (ISNULL(IPD.id_autorizado, 'S') = 'N')
 +
OR NOT (VPAPP.cd_pedido_palm_pai IS NOT NULL AND VPAPP.cd_pedido_palm_pai = VPAPP.cd_pedido_palm)
 +
OR NOT (VPAPP.cd_pedido_palm IS NOT NULL AND VPAPP.cd_pedido_palm = P.cd_pedido_palm)
 +
OR NOT (IPD.pr_desconto_aplicado IS NULL OR IPD.pr_desconto_aplicado = 0))
 +
THEN 'S' ELSE 'N' END
 +
WHEN TMP.id_tipo_pedido <> 'BO'  AND TMP.id_tipo_pedido <> 'BS' THEN
 +
CASE WHEN
 +
(IPD.pr_desconto_aplicado <= VAP.pct_desc OR AA.pct_desc = 100 )
 +
THEN 'S' ELSE 'N' END
 +
END AS 'O usuário pode aprovar'
 +
FROM pedido P WITH (NOLOCK)
 +
INNER JOIN view_supervisor_vendedor VSV ON (P.cd_vendedor = VSV.cd_vendedor AND VSV.cd_supervisor = @cdGestor)
 +
INNER JOIN (SELECT cd_vendedor, nm_vendedor FROM vendedor WITH (NOLOCK)) V ON P.cd_vendedor = V.cd_vendedor
 +
INNER JOIN (SELECT id_tipo_pedido, cd_tipo, ds_tipo, id_calcula_impostos FROM tipo_movimento_pedido WITH (NOLOCK)) TMP on (P.cd_tipo_pedido = TMP.cd_tipo)
 +
INNER JOIN item_preco_tabela_desconto_aplicado IPD ON P.cd_pedido_palm = IPD.cd_pedido_palm AND IPD.nr_item_pedido = @nrItemPedido
 +
INNER JOIN (SELECT
 +
cd_pedido_palm, nr_item_pedido, id_autorizado,cd_produto
 +
FROM item_pedido WITH (NOLOCK) ) I ON ((IPD.cd_pedido_palm = I.cd_pedido_palm) AND (IPD.nr_item_pedido = I.nr_item_pedido))
 +
INNER JOIN (SELECT cd_produto, nm_produto, ps_produto_kg, vr_max_pc_desconto FROM produto WITH (NOLOCK)) PR ON I.cd_produto = PR.cd_produto
 +
 +
-- verificar se o getor tem alçada de preço para aprovar o item pedido
 +
INNER JOIN usuario_alcada UA ON VSV.cd_supervisor = UA.cd_usuario
 +
INNER JOIN alcada_autorizacao AA ON UA.cd_alcada = AA.cd_alcada
 +
INNER JOIN view_alcada_produto VAP ON (IPD.cd_produto = VAP.cd_produto AND VAP.cd_alcada = AA.cd_alcada)
 +
 +
-- verificar se o getor tem alçada de pendencia para aprovar o item pedido
 +
INNER JOIN (SELECT cd_pedido_palm, nr_item_pedido, cd_tipo_bloc, id_status FROM item_pedido_pendente WITH(NOLOCK)) IPP ON IPD.cd_pedido_palm = IPP.cd_pedido_palm AND IPD.nr_item_pedido = IPP.nr_item_pedido AND ISNULL(IPP.ID_STATUS, 'S') = 'P'
 +
INNER JOIN alcada_tipo_bloc ATB WITH(NOLOCK) ON IPP.cd_tipo_bloc = ATB.cd_tipo_bloc
 +
INNER JOIN usuario_alcada_aprovacao UAA WITH(NOLOCK) ON UAA.cd_alcada = ATB.cd_alcada AND IPP.cd_tipo_bloc = ATB.CD_TIPO_BLOC AND UAA.cd_usuario = (SELECT cd_usuario FROM supervisor WHERE cd_supervisor = @cdGestor)
 +
 +
LEFT JOIN view_percentual_acrescimo_pedido_pai VPAPP WITH (NOLOCK) ON P.cd_pedido_palm = VPAPP.cd_pedido_palm
 +
 +
WHERE
 +
ISNULL(P.id_efetivado, 'S') = 'S'
 +
AND ((ISNULL(P.id_autorizado, 'S') = 'N') OR TMP.id_tipo_pedido = 'BS')
 +
AND (ISNULL(IPD.id_autorizado, 'S') = 'N')
 +
AND (@cdPedidoPalm IS NULL OR P.cd_pedido_palm = @cdPedidoPalm)
 +
 +
SELECT @aprovavel
 +
--FIM
 +
</pre>
 +
 +
* Limpar base pesada para teste
 +
 +
<pre>
 +
DBCC SHRINKDATABASE('bd_ssm_makitarenatolima', 0)
 +
 +
SELECT 'TRUNCATE TABLE ' + name  FROM sys.tables where name like 'LOG_%' and
 +
name not in ('LOG_IMPORTACAO', 'LOG_GPS', 'LOG_ID', 'LOG_CLOUD_SERVER', 'LOG_SERVER_CLOUD',
 +
'LOG_ACAO', 'LOG_PEDIDO_AUTO')
 +
</pre>
 +
 +
* Verificar a quantidade de dados sujos nas bases
 +
<pre>
 +
select 'SELECT COUNT(*), '''+ name + ''' FROM '+ name + ' WITH (NOLOCK) where data_delete is not null UNION ALL' from sys.tables
 +
where 
 +
name like '%_001'
 +
order by name asc;
 +
</pre>
 +
 +
* PEGAR OS USUARIOS DE UMA BASE DE PRODUÇÃO E CADASTRAR UMA CÓPIA DELES PARA UMA BASE DE BACKUP MANTENDO TODAS AS CONFIGURAÇÕES
 +
 +
<pre>
 +
use bd_ssm_login;
 +
 +
select ue.* from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'
 +
select u.CD_USUARIO from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'
 +
 +
select pu.*, ue.*, CAST(u.CD_USUARIO AS VARCHAR(10)) + '-' + NM_EMPRESA from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario
 +
inner join bd_ssm_montanahomologmobile..perfil_usuario pu on u.CD_USUARIO = pu.cd_usuario
 +
where nm_empresa like '%montana';
 +
go
 +
 +
INSERT INTO USUARIO
 +
  SELECT /*u.CD_USUARIO,*/u.NOME,u.LOGIN + 'homo',u.EMAIL,u.SENHA,u.SALT,u.TELEFONE,u.CD_USUARIO,u.VALIDO,u.DT_VALIDADE,u.DT_CRIACAO,u.URL_FOTO,u.DELTA_ITERACOES from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like 'montana' -- numero_violações
 +
 +
INSERT INTO USUARIO_EMPRESA
 +
select u.CD_USUARIO, ue.CD_TUSUARIO,ue.NM_EMPRESA + 'homologmobile',ue.VALIDO,ue.DT_VALIDADE,ue.DT_CRIACAO,ue.PAPEL
 +
from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on ue.cd_usuario = u.NUMERO_VIOLACOES where nm_empresa like 'montana'
 +
 +
UPDATE bd_ssm_montanahomologmobile..PERFIL_USUARIO
 +
SET
 +
    bd_ssm_montanahomologmobile..PERFIL_USUARIO.CD_USUARIO = U.CD_USUARIO
 +
FROM
 +
    USUARIO AS U
 +
    INNER JOIN bd_ssm_montanahomologmobile..PERFIL_USUARIO AS PU
 +
        ON U.NUMERO_VIOLACOES = PU.CD_USUARIO
 +
 +
SELECT * FROM  bd_ssm_montanahomologmobile..PERFIL_USUARIO PU
 +
INNER JOIN USUARIO U ON U.NUMERO_VIOLACOES = PU.CD_USUARIO
 +
 +
select ue.*, u.* from bd_ssm_login..usuario_empresa ue
 +
inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'
 +
 +
UPDATE USUARIO SET SENHA = 'GILGAMESH', SALT = 'PLAIN'
 +
where CD_USUARIO = 12780
 +
 +
UPDATE USUARIO SET SENHA = '06sCa+PtuytyYt4+QfRyiWyluxm8dTlJbs9qK4p/5u4=', SALT = 'c220c3e5-75fe-4c4f-a89a-4cc0920c4bc6'
 +
where CD_USUARIO = 12780
 +
-- 06sCa+PtuytyYt4+QfRyiWyluxm8dTlJbs9qK4p/5u4= c220c3e5-75fe-4c4f-a89a-4cc0920c4bc6
 +
 +
</pre>
 +
 +
* Verifiar duplicações de vinculações de cadastros nas bases
 +
<pre>
 +
 +
--VER SE EXISTE UM USUÁRIO VINCULADO A MAIS DE UM REGISTRO
 +
select count(*), tu.cd_usuario from tusuario tu
 +
left join DADOS_VENDEDOR dv on dv.CD_USUARIO_SEGURANCA = tu.CD_USUARIO
 +
left join SUPERVISOR s on S.CD_USUARIO = tu.CD_USUARIO
 +
where tu.CD_SITUACAO not in (2)
 +
group by  tu.cd_usuario
 +
ORDER BY 1 DESC
 +
 +
--VER SE EXISTEM USUARIOS COM MESMO LOGIN
 +
select count(*), tu.NM_GUERRA from tusuario tu
 +
where tu.CD_SITUACAO not in (2)
 +
group by  tu.NM_GUERRA
 +
ORDER BY 1 DESC
 +
 +
--VER SE EXISTEM USUARIOS COM MESMO CÓDIGO
 +
select count(*), tu.CD_USUARIO from tusuario tu
 +
where tu.CD_SITUACAO not in (2)
 +
group by  tu.CD_USUARIO
 +
ORDER BY 1 DESC
 
</pre>
 
</pre>

Edição atual tal como às 15h09min de 7 de junho de 2021

  • Comando pra saber se uma porta está em uso no windows
netstat -ano | find ":Required port number
netstat -ano | find "25"
  • Cadastro de empresa
use bd_ssm_adm;

exec sp_cadastra_empresa 'softsite2numobile', '25', 0, 3
exec CADASTRAR_BASE 'softsite2numobile', 'ANDERSON GOMES', 100
  • 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%' 
	and name not like '%cpf%' 
	and name not like '%expressa%'
	and name not like '%makitahomolog%' 
	and name not like '%prodentho_2%' 
order by name asc;
select 'SELECT ''' + name + ''' , COUNT(*) from '+name+'..CLIENTE_COORD_LOG WHERE CAST(DT_LOG AS DATE) >= ''2019-11-19'' AND CAST(DT_LOG AS DATE) <= ''2019-11-19'' 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%' 
	and name not like '%cpf%' 
order by name asc;

  • Pegar usuarios de uma empresa x
select * from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%colchobel%'
  • Pegar os dados de login de um usuario no evo

select u.login as LOGIN, u.SENHA AS SENHA, 
 CASE ue.PAPEL
	WHEN -1 THEN 'NENHUM'
	WHEN 0 THEN 'SUPORTE'
	WHEN 1 THEN 'GESTOR'
	WHEN 2 THEN 'VENDEDOR'
	WHEN 3 THEN	'CLIENTE'
	WHEN 4 THEN 'BACKOFFICE'
	WHEN 5 THEN 'INTEGRADOR'
	END AS PAPEL,
	dv.CD_VENDEDOR AS CD_VENDEDOR,
	s.CD_SUPERVISOR AS CD_SUPERVISOR
FROM bd_ssm_login..USUARIO_EMPRESA ue inner join bd_ssm_login..usuario u on u.CD_USUARIO = ue.CD_USUARIO
left join tusuario tu on tu.CD_USUARIO = ue.CD_TUSUARIO
left join dados_vendedor dv on dv.CD_USUARIO_SEGURANCA = tu.CD_USUARIO
left join supervisor s on s.CD_USUARIO = tu.CD_USUARIO
 WHERE nm_empresa = 'biodinamicanumobile'

GO
select u.*, ue.* FROM bd_ssm_login..USUARIO_EMPRESA ue inner join bd_ssm_login..usuario u on u.CD_USUARIO = ue.CD_USUARIO
 WHERE nm_empresa = 'biodinamicanumobile'
GO
  • 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%'
select ' disable trigger ' + tr.name + ' on ' + tb.name, st.is_disabled  from sys.sysobjects tr
inner join sys.sysobjects tb on tr.parent_obj = tb.id and tb.xtype = 'U'
inner join sys.triggers st on st.object_id = tr.id
where tr.xtype = 'tr' and st.is_disabled = 1
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


  • Pesquisar texto dentro das estruturas do banco
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 4'', GETDATE(), ''2020-05-30 00:01:00.000'', 2, ''https://sscatalogo.s3.amazonaws.com/marketing/banner_live_evo_3.jpg'', ''https://www.youtube.com/watch?v=0BzRbzEMh9A'', 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%' 
	and name not like '%cpf%' 
	and name not like '%dovac%' 
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 de

use bd_ssm_login;

--INSERIR INICIALMENTE UM USUÁRIO NA TABELA USUARIO DA LOGIN
INSERT INTO USUARIO VALUES 
('INTEGRADOR NOMEDAEMPRESA',    'int@nomeempresa',  'integrador@nomeempresa.com.br',    '3+ACVdglI558tfon1MRmVw==', 'SS',   NULL,   0,  1,  NULL,   GETDATE(),  NULL,   0);

--INSERIR UM REGISTRO NA USUARIO_EMPRESA
INSERT INTO USUARIO_EMPRESA VALUES
((SELECT CD_USUARIO FROM USUARIO WHERE NOME = 'INTEGRADOR NOMEDAEMPRESA'), NULL, 'nomedaempresaminusculo', 1, NULL, GETDATE(), 5)

--INSERIR UM TOKEN PARA O USUÁRIO 
INSERT INTO TOKEN VALUES
((SELECT SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(40)), '-', ''), 1, 20)), 
(SELECT CD_USUARIO FROM USUARIO WHERE NOME = 'INTEGRADOR NOMEDAEMPRESA'), 
GETDATE(), '2030-02-06 10:14:00.593')

SELECT * FROM USUARIO WHERE NOME LIKE '%INTEGRADOR NOMEDAEMPRESA%';
SELECT * FROM USUARIO_EMPRESA WHERE CD_USUARIO = 7491
SELECT * FROM TOKEN WHERE CD_USUARIO = 7491

SELECT * FROM USUARIO_EMPRESA UE
	INNER JOIN USUARIO U
	 ON U.CD_USUARIO = UE.CD_USUARIO 
WHERE NM_EMPRESA = 'lorenferhomolog'
AND UE.PAPEL = 5

SELECT * FROM TOKEN WHERE CD_USUARIO = 8353
  • 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@/_ .,+%!-]%'
  • Script de limpeza de registros duplicados.
BEGIN TRANSACTION

CREATE TABLE TABELA_TEMP (
    CD_USUARIO INT,
    LONGITUDE DECIMAL(10, 6),
    LATITUDE DECIMAL(10, 6),
    DT_COORD DATETIME,
    PRECISAO INT,
    ORIGEM VARCHAR(2)
)

INSERT INTO TABELA_TEMP 
    SELECT DISTINCT CD_USUARIO, LONGITUDE, LATITUDE,DT_COORD, PRECISAO, ORIGEM FROM COORDENADA_RASTREAMENTO ORDER BY DT_COORD ASC;

TRUNCATE TABLE COORDENADA_RASTREAMENTO;

INSERT INTO COORDENADA_RASTREAMENTO (CD_USUARIO, LONGITUDE, LATITUDE, DT_COORD, PRECISAO, ORIGEM)
    SELECT CD_USUARIO, LONGITUDE, LATITUDE,DT_COORD, PRECISAO, ORIGEM FROM TABELA_TEMP ORDER BY DT_COORD ASC;

DROP TABLE TABELA_TEMP;
COMMIT;


  • Criação de usuários de clientes na makita

SELECT * FROM USUARIO_VINCULACAO;

INSERT INTO TGRUPOSUSUARIO (CD_USUARIO, CD_GRUPO)
	SELECT CD_USUARIO, 7 FROM TUSUARIO WHERE DS_SENHA = '4ZdOxz2fsGR3xqAJeGo82A=='

INSERT INTO USUARIO_VINCULACAO (CD_TUSUARIO, CD_VINCULADO, CD_TIPO_VINCULADO)
	SELECT T.CD_USUARIO, C.CD_CLIENTE, 'C' FROM TUSUARIO T 
		INNER JOIN  CLIENTE C ON C.NR_CNPJ_CPF = T.NM_GUERRA COLLATE SQL_Latin1_General_CP1_CI_AS
	WHERE T.DS_SENHA = '4ZdOxz2fsGR3xqAJeGo82A=='
	AND C.CD_CLIENTE IN (13913)

INSERT INTO TUSUARIO (CD_USUARIO,NM_USUARIO,DS_EMAIL,DS_SENHA,ID_SUPER,NM_GUERRA,DT_EXPSENHA,DT_ALTSENHA,NR_VIOLACOES,
		CD_SITUACAO,DT_SITUACAO,DS_MOTIVO_SITUACAO,ID_ALT_SENHA_PROX_LOGIN,CD_TPUSUARIO,CD_EMPRESA,CD_FILIAL,ID_USER_SOFTSITE,
		ID_ATIVO,IMEI_GPS)
		SELECT ((SELECT MAX(CD_USUARIO) FROM TUSUARIO) + ROW_NUMBER() OVER(ORDER BY CD_CLIENTE ASC)) AS CD_USUARIO,
			CAST(C.NM_CLIENTE AS VARCHAR(40)) AS NM_USUARIO,
			C.DS_EMAIL,
			'4ZdOxz2fsGR3xqAJeGo82A==' AS DS_SENHA,
			'N' AS ID_SUPER,
			C.NR_CNPJ_CPF AS NM_GUERRA,
			NULL AS DT_EXPSENHA,
			GETDATE() AS DT_ALTSENHA,
			0 AS NR_VIOLACOES,
			1 AS CD_SITUACAO,
			GETDATE() AS DT_SITUACAO,
			NULL AS DS_MOTIVO_SITUACAO,
			NULL AS ID_ALT_SENHA_PROX_LOGIN,
			NULL AS CD_TPUSUARIO,
			NULL AS CD_EMPRESA,
			NULL AS CD_FILIAL,
			'N' AS ID_USER_SOFTSITE,
			NULL AS ID_ATIVO,
			NULL AS IMEI_GPS 
		FROM CLIENTE C
		WHERE CD_CLIENTE IN (13913)  
	AND NOT EXISTS (SELECT TOP 1 1 FROM USUARIO_VINCULACAO UE WHERE C.CD_CLIENTE = UE.CD_VINCULADO)



  • Visualização de falhas de importação
DECLARE  @nomeBanco varchar(100); 

DECLARE bancos CURSOR FOR   
    SELECT name
    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%' 
	and name not like '%cpf%' 
	and name not like '%expressa%'
	and name not like '%makitahomolog%' 
	and name not like '%prodentho_2%' 

OPEN bancos  
  
FETCH NEXT FROM bancos   
INTO @nomeBanco  
  
WHILE @@FETCH_STATUS = 0
BEGIN  
	EXEC ('use ' + @nomeBanco + ';' + 'SELECT TOP 1 ''NOME DO BANCO '' + REPLACE(''' + @nomeBanco +''', ''bd_ssm_'','''') , * FROM DW_IMPORTACAO WHERE ISNULL(RESULTADO, ''A'') IN (''F'', ''A'') ORDER BY 4 DESC;');
END   
CLOSE bancos;  
DEALLOCATE bancos;
  • Configurar base para usar o Claudus V3
ALTER TABLE LOG_ITEM_PEDIDO
ADD NR_ITEM_PEDIDO BIGINT 
GO

ALTER TABLE LOG_ITEM_PEDIDO_RETORNO
ADD NR_ITEM_PEDIDO BIGINT 

GO

ALTER TRIGGER [dbo].[TR_AUDIT_LOG_DELETE_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR DELETE

	AS  
	DECLARE @TODAY DATETIME  
	SET @TODAY = GETDATE()  
	
	INSERT INTO LOG_ITEM_PEDIDO
	(
		DT_LOG
		,ID_KEY
		,TP_OPERACAO
		,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO
	)
	SELECT 
		@TODAY as DT_LOG
		,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY

			,'D' as TP_OPERACAO
			,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO

		FROM DELETED

GO

ALTER TRIGGER [dbo].[TR_AUDIT_LOG_UPDATE_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR UPDATE

	AS  
	DECLARE @TODAY DATETIME  
	SET @TODAY = GETDATE()  
	
	INSERT INTO LOG_ITEM_PEDIDO
	(
		DT_LOG
		,ID_KEY
		,TP_OPERACAO
		,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO
	)
	SELECT 
		@TODAY as DT_LOG
		,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY

			,'U' as TP_OPERACAO
			,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO

		FROM INSERTED
	
GO

ALTER TRIGGER [dbo].[TR_AUDIT_LOG_INSERT_ITEM_PEDIDO] ON [dbo].[ITEM_PEDIDO] FOR INSERT

	AS  
	DECLARE @TODAY DATETIME  
	SET @TODAY = GETDATE()  
	
	INSERT INTO LOG_ITEM_PEDIDO
	(
		DT_LOG
		,ID_KEY
		,TP_OPERACAO
		,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO
	)
	SELECT 
		@TODAY as DT_LOG
		,('CD_PEDIDO_PALM='+CONVERT(VARCHAR(20),CD_PEDIDO_PALM)+';NR_ITEM_PEDIDO='+CONVERT(VARCHAR(20),NR_ITEM_PEDIDO)+';CD_PRODUTO='+CONVERT(VARCHAR(10),CD_PRODUTO)) AS ID_KEY

			,'I' as TP_OPERACAO
			,CD_PEDIDO_PALM
		,NR_ITEM_PEDIDO
		,CD_PRODUTO

		FROM INSERTED
GO
  • Consulta para trazer os pedidos auto do geosales3
SELECT cd_pedido_cliente	 [cdPedidoCliente],
	   		   pa.cnpj_cliente		 [cliente.nrCnpjCpf],
	   		   c.cd_cliente			 [cliente.cdCliente],
	   		   c.nm_cliente			 [cliente.nmCliente],
	   		   c.cd_org_venda_padrao [cliente.orgVendaPadrao.cdOrgVenda],
	   		   ov.nm_organizacao	 [cliente.orgVendaPadrao.nmOrganizacao],
	   		   c.cd_vendedor_padrao  [cliente.vendedorPadrao.codigo],
	   		   v.nm_vendedor		 [cliente.vendedorPadrao.nome],
	   		   c.cd_tab_preco_padrao [cliente.tabPrecoPadrao.cdTabPreco],
	   		   tp.ds_tab_preco 		 [cliente.tabPrecoPadrao.dsTabPreco],
	   		   c.nm_estado           [cliente.enderecoPadrao.nmEstado],
	   		   c.cd_cond_pgto_padrao [cliente.condPgtoPadrao.cdCondPgto],
	   		   cp.ds_cond_pgto 		 [cliente.condPgtoPadrao.dsCondPgto],
	   		   c.cd_meio_pgto_padrao [cliente.meioPagamentoPadrao.cdMeioPgto], 
       		   mp.ds_meio_pgto       [cliente.meioPagamentoPadrao.dsMeioPgto],
	   		   cnpj_fornecedor		 [cnpjFornecedor],
	   		   dt_emissao			 [dataEmissaoStr],
	   		   cp.cd_cond_pgto		 [condicaoPagamento.cdCondPgto],
	   		   cp.ds_cond_pgto		 [condicaoPagamento.dsCondPgto],
	   		   cp.pr_desconto		 [condicaoPagamento.prDescontoStr],
	   		   dt_vencimento		 [dataVencimentoStr],
	   		   cd_tipo_frete		 [frete.idTipoFrete],
	   		   motivo_bonificacao	 [motivoBonificacao],
	   		   dt_entrega			 [dataEntregaStr],
	   		   obs_pedido			 [observacaoPedido],
	   		   pa.cd_tipo_pedido	 [tipoPedido.codTipo],
	   		   tmp.ds_tipo			 [tipoPedido.descTipo],
	   		   id_utilizado			 [idUtilizadoStr]
		FROM   pedido_auto pa 
		INNER JOIN cliente c ON pa.cnpj_cliente = c.nr_cnpj_cpf
		INNER JOIN organizacao_venda ov ON c.cd_org_venda_padrao = ov.cd_org_venda
		INNER JOIN vendedor v ON c.cd_vendedor_padrao = v.cd_vendedor
		INNER JOIN tabela_preco tp ON c.cd_tab_preco_padrao = tp.cd_tab_preco
		INNER JOIN condicao_pagamento cp ON c.cd_cond_pgto_padrao = cp.cd_cond_pgto 
		INNER JOIN meio_pagamento mp ON mp.cd_meio_pgto = c.cd_meio_pgto_padrao
		INNER JOIN tipo_movimento_pedido tmp ON pa.cd_tipo_pedido = tmp.cd_tipo
		WHERE ( EXISTS (	SELECT TOP 1 1 
						   	FROM Fn_obter_cliente_usuario(#usuario.codigo#) fn 
						   	WHERE ( fn.cd_cliente = c.cd_cliente ) 
						) 
			  ) AND pa.id_utilizavel = 'S' AND id_utilizado = 'N'
  • Scripts de análise de configuração do novo aplicativo de rastreamento
--CONFIGURACAO
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_BASE_URL%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_CAPTURAR_LOG%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_FUNCTION_MODE%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_HOUR_START%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_HOUR_FINISH%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_LOGGED_APP%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_MIN_DISTANCE%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_N_TRY%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_NUMERO_ENVIAR_LOG%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_NUMERO_INSERIR_LOG%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_SLEEP_TRY%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_STOP_SERVICE_PERMISSION%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_TIMER_BATTERY%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_TRIANGULATION_ACTIVE%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%GPS_VIEW_CONFIGURATION%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%SSWM_ID_GPS%'
SELECT * FROM CONFIGURACAO WHERE DS_CHAVE LIKE '%SSWM_ID_LOCK%'

--IMEI USUARIO
SELECT IMEI_GPS, * FROM TUSUARIO WHERE CD_USUARIO = 181 --358692106755103
--VENDEDOR DE ANÁLISE
SELECT IMEI, * FROM DADOS_VENDEDOR WHERE CD_VENDEDOR = 37; --358692106755103
--VERIFICAR STATUS DO GPS
SELECT * FROM GPS_STATUS WHERE CD_USUARIO = 181 order by 3 desc;
--VERIFICAR COORDENADAS
SELECT * FROM COORDENADA_RASTREAMENTO WHERE CD_USUARIO = 181 order by 5 desc


--teste
SELECT * FROM bd_ssm_webinargeosales..GPS_STATUS WHERE CD_USUARIO = 155 order by 3 desc;
SELECT * FROM bd_ssm_webinargeosales..COORDENADA_RASTREAMENTO WHERE CD_USUARIO = 155 ORDER BY 5 DESC;




--GPS STATUS
--A - ATIVO - (GPS OU INTERNET)
--D - DESATIVADO - (GPS OU INTERNET)
--C - DESTRUIÇÃO DO SERVIÇO DE CONFIGURACAO 
--R - DESTRUIÇÃO DO SERVIÇO DE RASTREAMENTO

  • Achar tabelas que tem a coluna Y
select SO.NAME, * from sys.columns SC
	INNER JOIN sys.objects SO
	ON SC.object_id = SO.object_id where SC.name like '%cd_org_venda%'
	and type = 'U'
  • Migrar imagens de catálogo para produto imagem no evo
BEGIN TRANSACTION

DECLARE @Imagens TABLE(DESC_FOTO VARCHAR(100), URL VARCHAR(1000), ID_ATIVO bit)
DECLARE @ProdutoImagens TABLE(CD_PRODUTO INT, CD_IMAGEM INT, ID_PRINCIPAL CHAR(1), ID_ATIVO BIT)
INSERT INTO @Imagens
	SELECT DISTINCT DS_FOTO, DS_URL, 1 FROM CATALOGO_FOTO;

INSERT INTO IMAGEM
	SELECT ROW_NUMBER() OVER(ORDER BY DESC_FOTO ASC), DESC_FOTO, URL, ID_ATIVO FROM @Imagens;

INSERT INTO @ProdutoImagens
	SELECT CF.CD_PRODUTO, I.CD_IMAGEM, CF.ID_PRINCIPAL, 1 FROM
		IMAGEM I
			INNER JOIN CATALOGO_FOTO CF 
				ON I.URL_IMAGEM  = CF.DS_URL
	WHERE CD_PRODUTO IS NOT NULL

INSERT INTO PRODUTO_IMAGEM
	SELECT DISTINCT CD_PRODUTO, CD_IMAGEM, ID_PRINCIPAL, ID_ATIVO FROM
		@ProdutoImagens
COMMIT;
  • VERIFICAR PORQUE O PRODUTO NÃO APARECE PRO CLIENTE APÓS O PREENCHIMENTO DO CABEÇALHO
--consulta que traz os pedido quando multiplos estoques está ativado
SELECT
		p.cd_produto,*
	FROM fn_obter_produtos_com_paginacao('0101089', 2,
			38, null) pot
	INNER JOIN produto p WITH(NOLOCK) ON pot.cd_produto = p.cd_produto

		--INNER JOIN familia_produto fp ON p.cd_familia = fp.cd_familia AND fp.cd_familia = #{familia.key}

	INNER JOIN lista_produto lp WITH(NOLOCK) ON (lp.cd_produto = pot.cd_produto AND lp.cd_org_venda = pot.cd_org_venda AND lp.cd_tab_preco = pot.cd_tab_preco)
	where
		 EXISTS (
					SELECT 1 FROM produto_estoque pe 
					WHERE
						pe.cd_produto = p.cd_produto AND pe.cd_estoque = 200
				)

	ORDER BY p.nm_produto OFFSET 0 ROWS FETCH NEXT 18 ROWS ONLY

--funcão de paginação
CREATE FUNCTION [dbo].[fn_obter_produtos_com_paginacao] (
	@cdOrgVenda VARCHAR(20),
	@cdTabPreco INT,
	@cdCliente INT,
	@param VARCHAR(100))
RETURNS TABLE
AS
RETURN (
	WITH org_venda AS (
		SELECT
			ov.cd_org_venda,
			ovc.cd_cliente,
			ov.cd_estoque,
	
		ovc.cd_tab_preco
		FROM organizacao_venda ov WITH(NOLOCK)
		INNER JOIN org_venda_cliente ovc WITH(NOLOCK) ON ov.cd_org_venda = ovc.cd_org_venda
		WHERE ov.cd_org_venda = @cdOrgVenda AND ovc.cd_tab_preco = @cdTabPreco
			AND ovc.cd_cliente = @cdCliente
	
), produto_organizacao_tabela AS ( 
		SELECT
			p.cd_produto, 
			p.nm_produto,
			ov.cd_cliente,
			ov.cd_org_venda, 
			ov.cd_estoque, 
		ov.cd_tab_preco
		FROM produto p WITH(NOLOCK)
		CROSS JOIN org_venda ov WITH(NOLOCK)
		WHERE (
				(@param IS NULL)
 OR 
				(p.nm_produto LIKE '%' + @param + '%' 
				 OR p.cd_produto LIKE '%' + @param + '%' 
				 OR p.cd_referencia LIKE '%' + @param + '%'
				 OR p.cod_barras LIKE '%' + @param + '%'
				 OR p.cd_ncm LIKE '%' + @param + '%')
			)
	)

	SELECT
		p.cd_pr
oduto,
		pot.cd_org_venda,
		pot.cd_tab_preco,
		pot.cd_estoque
	FROM  produto_organizacao_tabela pot
	INNER JOIN produto p WITH(NOLOCK) ON pot.cd_produto = p.cd_produto 
)


  • Remover usuários inválidos de uma base mssql

declare @db varchar(50)
declare @cont int
declare @usuariodb varchar(50)
declare @cmd varchar (200)
--set @db = (SELECT '?' AS db_name)
--print @db
create table ##usuariobd (cod int primary key identity, nome_usuario varchar (50), nome_login
varchar(50))
insert into ##usuariobd
select su.name, sl.name--, db_name()
from [dbo].[sysusers] su
left join sys.syslogins sl on su.sid = sl.sid
where su.uid > 4
and su.name not like 'db_%'
and su.name <> 'MS_DataCollectorInternalUser'
and issqlrole <> 1
and sl.name is null
order by 1
set @cont = (select MAX(cod) from ##usuariobd)
while @cont >0
begin
set @usuariodb = (select nome_usuario from ##usuariobd where cod = @cont)
IF EXISTS (SELECT SCHEMA_ID FROM sys.schemas WHERE [name] = @usuariodb)
BEGIN
print 'Deletando Schema ' + @usuariodb
set @cmd = 'drop schema [' + @usuariodb + ']'
print @cmd
exec (@cmd)
END
print 'Deletando usuário '+ @usuariodb + '!'
set @cmd= 'drop user [' + @usuariodb + ']'
exec (@cmd)
set @cont = @cont -1
end
drop table ##usuariobd
  • Pegar dados servidor de banco de dados
SELECT @@SERVERNAME,
 CONNECTIONPROPERTY('net_transport') AS net_transport,
 CONNECTIONPROPERTY('protocol_type') AS protocol_type,
 CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
 CONNECTIONPROPERTY('local_net_address') AS local_net_address,
 CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
 CONNECTIONPROPERTY('client_net_address') AS client_net_address
  • Agregador de dados
SELECT c.cd_cliente, STRING_AGG(r.DS_ROTA, ', ')
FROM cliente c
LEFT JOIN CLIENTE_ROTA cr on c.CD_CLIENTE = cr.CD_CLIENTE
LEFT JOIN ROTA r on r.CD_ROTA = cr.CD_ROTA
GROUP BY c.cd_cliente
  • Script para validar se o pedido pode ser copiado
SELECT
			-- pedido 
			P.cd_pedido_palm           AS [cdPedidoPalm],
			P.dt_emissao               AS [dtEmissao],
			P.dt_vencimento            AS [dtVencimento],
			P.cd_pedido_cliente        AS [cdPedidoCliente],
			P.cd_pedido                AS [cdPedido],
			P.dt_entrega               AS [dtEntrega],
			P.dt_faturamento           AS [dtFaturamento],
			P.dt_entrega_calculada     AS [dtEntregaCalculada],
			P.id_prioridade            AS [idPrioridade],
			P.ds_observacao            AS [observacao],
			P.ds_obs_frete             AS [observacaoFrete],
			P.ds_observacao_nf         AS [observacaoNotaFiscal],
			P.nm_rz_social_entr        AS [nmRazaoSocialEntrega],
			P.nr_cnpj_cpf_entr         AS [cpfCnpjEntrega],
			P.nr_cgf_entr              AS [cgfEntrega],
			P.nm_responsavel           AS [nomeResponsavel],
			P.id_orcamento             AS [orcamento],
			P.cd_rota                  AS [cdRota],
			P.id_efetivado             AS [efetivado],
			P.pc_desconto              AS [pcDesconto],
			P.id_cross_docking         AS [crossDocking],
			P.pc_desc_bonif            AS [pcDescBonif],
			P.vr_outros_descontos      AS [outrosDescontos],
			P.vr_frete_manual          AS [vrFreteManual],
			P.vr_frete_manual_original AS [vrFreteManualOriginal],
			P.acrescimo_dias           AS [acrescimoDias],
			P.qt_quilometros_entrega   AS [qtQuilometrosEntrega],
			P.qt_quilometros_cobranca  AS [qtQuilometrosCobranca],
			-- cliente -->
			C.cd_cliente                AS [cliente@cdCliente],
			C.cd_aprovacao              AS [cliente@cdAprCliente],
			CASE WHEN
				C.origem = 'CLIENTE_APROVACAO' THEN 1
				ELSE 0
			END                         AS [cliente@isProspect],
		-- organizacao venda
			OV.cd_org_venda 			AS [orgVenda@cdOrgVenda],
			-- tipo pedido
			TMP.cd_tipo                 AS [tipoPedido@codTipo],
			-- vendedor
			V.cd_vendedor               AS [vendedor@codigo],
			-- tabela preco
			TP.cd_tab_preco             AS [tabPreco@cdTabPreco],
			-- estoque
			P.cd_estoque                AS [estoque@cdEstoque],
			-- canal de venda
			p.cd_canal                  AS [canalVenda@codigo],
			-- meio pagamento
			P.cd_meio_pgto 			    AS [meioPagamento@cdMeioPgto],
			-- meio pagamento secundario
			P.cd_meio_pgto_sec 			AS [meioPgtoSecundario@cdMeioPgto],
			-- cond. pgto 
			P.cd_cond_pgto              AS [condPgto@cdCondPgto],
			-- cond. pgto secundario 
			P.cd_cond_pgto_sec			AS [condPgtoSecundario@cdCondPgto],
			-- tipo frete 
			P.id_tipo_frete             AS [tipoFrete@idTipoFrete],
			-- transportadora 
			P.cd_transportadora			 AS [transportadora@codigo],
			-- transportadora auxiliar 
			p.cd_transportadora_auxiliar AS [transportadoraAuxiliar@codigo],
			-- situacao pedido 
			SP.cd_st_pedido				AS [situacaoPedido@cdStPedido],
			SP.ds_st_pedido			    AS [situacaoPedido@dsStPedido],
			-- pedido pai 
			PPAI.cd_pedido_palm         AS [pedidoPaiDTO@cdPedidoPalm],
			PPAI.dt_emissao             AS [pedidoPaiDTO@dtEmissao],
			PPAI.vr_pedido_impostos     AS [pedidoPaiDTO@vrPedidoImpostos],
			-- endereco entrega 
			P.cd_endereco_entrega       AS [enderecoEntrega@cdEndereco],
			P.ds_endereco_entr          AS [enderecoEntrega@dsEndereco],
			P.nm_bairro_entr            AS [enderecoEntrega@nmBairro],
			P.nm_cidade_entr            AS [enderecoEntrega@nmCidade],
			P.nm_estado_entr            AS [enderecoEntrega@nmEstado],
			P.nr_cep_entr               AS [enderecoEntrega@nrCep],
			P.nr_fone_entr              AS [enderecoEntrega@nrTelefone],
			P.nr_cnpj_cpf_entr          AS [enderecoEntrega@nrCnpjCpf],
			-- endereco cobranca
			P.cd_endereco_cobranca      AS [enderecoCobranca@cdEndereco],
			P.ds_endereco_cobr          AS [enderecoCobranca@dsEndereco],
			P.nm_bairro_cobr            AS [enderecoCobranca@nmBairro],
			P.nm_cidade_cobr            AS [enderecoCobranca@nmCidade],
			P.nm_estado_cobr            AS [enderecoCobranca@nmEstado],
			P.nr_cep_cobr               AS [enderecoCobranca@nrCep],
			P.nr_fone_cobr              AS [enderecoCobranca@nrTelefone],
			P.nr_cnpj_cpf_cobr          AS [enderecoCobranca@nrCnpjCpf],
			-- pedido informacao extra 
			PIEXT.cd_inf                AS [pedInfoExtra@cdInf],
			PIEXT.ds_inf                AS [pedInfoExtra@dsLabel],
			PIEXT.cd_tipo_inf           AS [pedInfoExtra@cdTipoInf],
			PIEXT.ds_livre_inf          AS [pedInfoExtra@dsLivreInf],
			-- tramitacao_pedido
			trp.cd_pedido_palm			AS [tramitacaoPedido@cdPedidoPalm],
			trp.cd_pedido_palm			AS [tramitacaoPedido@pedido@cdPedidoPalm], 
			trp.cd_tramitacao			AS [tramitacaoPedido@tramitacao@cdTramitacao], 
			tram.ds_tramitacao			AS [tramitacaoPedido@tramitacao@dsTramitacao], 
			trp.ds_observacao			AS [tramitacaoPedido@dsObservavao], 
			trp.dt_tramitacao			AS [tramitacaoPedido@dtTramitacao], 
			trp.cd_usuario			    AS [tramitacaoPedido@usuarioSistema@codigo],
	    	-- tramitacao_pedido
	    	P.cd_motivo_pedido			AS [motivoPedido@cdMotivoPedido],
	    	mot.ds_motivo_pedido		AS [motivoPedido@dsMotivoPedido]
		FROM vw_pedidos P
		INNER JOIN (SELECT cd_cliente, nm_cliente, cd_aprovacao, origem FROM vw_clientes) C on (P.cd_cliente = C.cd_cliente)
		INNER JOIN (SELECT cd_org_venda, nm_organizacao FROM organizacao_venda WITH (NOLOCK)) OV ON P.cd_org_venda = OV.cd_org_venda
		INNER JOIN (SELECT id_tipo_pedido, cd_tipo, ds_tipo FROM tipo_movimento_pedido) TMP on (P.cd_tipo_pedido = TMP.cd_tipo)
		INNER JOIN (SELECT cd_vendedor, nm_vendedor FROM vendedor) V ON P.cd_vendedor = V.cd_vendedor
		INNER JOIN tabela_preco TP ON P.cd_tab_preco = TP.cd_tab_preco
		LEFT JOIN situacao_pedido sp ON P.cd_st_pedido = sp.cd_st_pedido
		LEFT JOIN (SELECT cd_pedido_palm, dt_emissao, vr_pedido_impostos FROM vw_pedidos WITH(NOLOCK)) ppai ON P.cd_pedido_palm_pai = ppai.cd_pedido_palm
		LEFT JOIN vw_pedidos_informacoes_extras PIEXT ON P.cd_pedido_palm = PIEXT.cd_pedido_palm
		LEFT JOIN vw_tramitacoes_pedidos trp WITH(NOLOCK) ON P.cd_pedido_palm = trp.cd_pedido_palm
		LEFT JOIN tramitacao tram ON trp.cd_tramitacao = tram.cd_tramitacao
		LEFT JOIN motivo_pedido mot ON mot.cd_motivo_pedido = P.cd_motivo_pedido
		WHERE
			P.cd_pedido_palm = 20063013102232739
			AND (
					(
						(P.origem = 'PEDIDO_RETORNO' OR P.origem = 'PEDIDO')
						AND EXISTS (
							-- org_venda_cliente
							SELECT TOP 1 1 FROM org_venda_cliente OVC
							WHERE
								P.cd_org_venda = OVC.cd_org_venda 
								AND P.cd_cliente = OVC.cd_cliente
								AND P.cd_vendedor = OVC.cd_vendedor 
								AND P.cd_tab_preco = OVC.cd_tab_preco
						
						)
					)	
				OR
					(
						P.origem = 'PEDIDO_APROVACAO'
						AND EXISTS (
						-- parametros_cliente_prospect
							SELECT TOP 1 1 FROM parametros_venda_prospect PCP
							WHERE
								P.cd_org_venda = PCP.cd_org_venda 
								AND P.cd_vendedor = PCP.cd_vendedor 
								AND P.cd_tab_preco = PCP.cd_tab_preco
						)
					)
			)



  • Script para criar um usuário com todos os acessos no EVO/NuPortal
-- __   __   __           __   ___  __  
--/ _` /  \ |  \    |  | /__` |__  |__) 
--\__> \__/ |__/    \__/ .__/ |___ |  \ 
                                     

-- 1º utilize a base desejada e insira o nome da empresa em @nm_empresa
	use bd_ssm_biodinamicajucianodev
	DECLARE @nm_empresa VARCHAR(200) = 'biodinamicajucianodev'

-- 2º escolha um nome(novo ou já existente) para o perfil que terá acesso a tudo, este nome também será a senha para o portal EVO.
	DECLARE @nm_new_perfil VARCHAR(100) = 'dog'

-- 3º Escolha um usuário da base escolhida que não exista na USUARIO_PERFIL através da query abaixo. 
-- Observe que a consulta utiliza as variáveis acima para funcionar, então selecione-as ao executá-la.
	SELECT DISTINCT (u.cd_usuario), ue.cd_tusuario, u.nome, u.login, u.email, u.senha, u.salt, u.dt_criacao, u.dt_validade, u.valido FROM bd_ssm_login..usuario u
	INNER JOIN bd_ssm_login..usuario_empresa ue ON u.cd_usuario = ue.cd_usuario
	INNER JOIN perfil_usuario pu ON pu.cd_usuario !=  u.cd_usuario
	WHERE (ue.nm_empresa LIKE '%'+ @nm_empresa +'%' OR u.login LIKE '%'+ @nm_empresa +'%')
--  AND ue.papel = 2
--  AND u.login like '%jbonatto%'
--  AND u.cd_usuario = 28607
--  AND ue.cd_tusuario IN (170, 205)

--PAPÉIS:
--NENHUM(-1)
--SUPORTE(0)
--GESTOR(1)
--VENDEDOR(2)
--CLIENTE(3)
--BACKOFFICE(4)
--INTEGRADOR(5)

-- 5º Substitua NULL pelo bd_ssm_login..cd_usuario escolhido em @cdUsuario_dog. o Script só executará se a variável @cdUsuario_dog estiver diferente de NULL
DECLARE @cdUsuario_dog INT = NULL;
-- Porque dog? Dog invertido fica god, que dá o sentido de god user.

-- 6º Após os passos acima, verifique se as variáveis acima (@nm_empresa, @nm_new_perfil, @cdUsuario_dog) estão com os valores corretos.

-- 7º Execute todo este script. Se estiver no Microsoft SQL Server Management Studio apenas pressione F5.
-- Se tudo ocorrer bem você visualizará o usuário escolhido no último select resultante deste script.

-- Após executá-lo não pare o script, pois isso pode gerar um processo travado/bloqueado.

DECLARE @cd_perfil_already_exists INT = (SELECT CD_PERFIL FROM PERFIL WHERE NM_PERFIL = @nm_new_perfil)

BEGIN TRANSACTION 
BEGIN TRY
	IF (@cdUsuario_dog IS NOT NULL 
		AND @nm_new_perfil IS NOT NULL 
		AND @nm_new_perfil <> '' 
		AND (SELECT DB_NAME()) = 'bd_ssm_' + @nm_empresa
		AND NOT EXISTS (SELECT TOP 1 1 FROM PERFIL_USUARIO WHERE CD_USUARIO = @cdUsuario_dog)
		)
		BEGIN
			DECLARE @I INT = 1
			DECLARE @cdPerfilChoosed INT;
			DECLARE @cdAcaoTemp INT;

			--Decidindo o perfil a ser usado 
			IF(@cd_perfil_already_exists IS NULL) 
				BEGIN
					INSERT INTO PERFIL(
						CD_PERFIL, 
						NM_PERFIL
					) VALUES (
						(SELECT ISNULL((SELECT MAX(CD_PERFIL) FROM PERFIL), 1) + 1), 
						@nm_new_perfil
					)
					SET @cdPerfilChoosed = (SELECT CD_PERFIL FROM PERFIL WHERE NM_PERFIL = @nm_new_perfil)
				END
			ELSE
				BEGIN
					SET @cdPerfilChoosed = @cd_perfil_already_exists
				END

			--Vinculando usuário a um perfil
			INSERT INTO PERFIL_USUARIO (CD_PERFIL, CD_USUARIO)
			VALUES (@cdPerfilChoosed, @cdUsuario_dog)

			--Inserindo ações para o perfil escolhido

			DECLARE @acoes TABLE(
				CD_RANK INT,
				CD_ACAO INT
			)

			;WITH acoes AS(
				SELECT 
					ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rk, 
					CD_ACAO 
				FROM BD_SSM_LOGIN..ACAO 
				WHERE ID_ACAO NOT LIKE '%OCULTA%' AND ID_ACAO <> 'HABILITAR_MULT_FILIAIS_ESTOQUE_PEDIDO'
			) INSERT INTO @acoes SELECT rk, CD_ACAO from acoes

			DECLARE @LENGHT INT = (SELECT count(*) FROM BD_SSM_LOGIN..ACAO WHERE ID_ACAO NOT LIKE '%OCULTA%' AND ID_ACAO <> 'HABILITAR_MULT_FILIAIS_ESTOQUE_PEDIDO')

			WHILE (@I < @LENGHT)
				BEGIN
					
					SET @cdAcaoTemp = (SELECT CD_ACAO FROM @acoes WHERE CD_RANK = @I)

					IF NOT EXISTS ((SELECT TOP 1 1 FROM ACAO_PERFIL WHERE CD_PERFIL = @cdPerfilChoosed AND CD_ACAO = @cdAcaoTemp)) 
						BEGIN 
							INSERT INTO ACAO_PERFIL(CD_ACAO, CD_PERFIL)
							VALUES ((SELECT CD_ACAO FROM @acoes WHERE CD_RANK = @I) , @cdPerfilChoosed)
						END		
					SET @I += 1;
				END

			IF (SELECT salt FROM BD_SSM_LOGIN..USUARIO U where cd_usuario = @cdUsuario_dog) != 'PLAIN'
				BEGIN
					UPDATE bd_ssm_Login..usuario SET SALT = 'PLAIN', SENHA = @nm_new_perfil where cd_usuario = @cdUsuario_dog
				END
			SELECT 'Abaixo terá as informações de login EVO.' AS 'SEU GOD USER FOI CRIADO COM SUCESSO!' 
			SELECT u.LOGIN, u.SENHA, u.SALT, U.CD_USUARIO, UE.CD_TUSUARIO, p.NM_PERFIL, * FROM BD_SSM_LOGIN..USUARIO U
					INNER JOIN bd_ssm_login..USUARIO_EMPRESA UE ON U.CD_USUARIO = UE.CD_USUARIO
					INNER JOIN PERFIL_USUARIO PU ON PU.CD_USUARIO = U.CD_USUARIO
					INNER JOIN PERFIL P ON P.CD_PERFIL = PU.CD_PERFIL
					WHERE u.CD_USUARIO = @cdUsuario_dog
		END
	ELSE
		BEGIN
			SELECT 'DADOS EQUIVOCADOS, BASE DIVERGENTE OU JÁ EXISTE ESTE USUÁRIO NA USUARIO_PERFIL'
		END
	COMMIT;
END TRY
	BEGIN CATCH
		SELECT 'ROLLBACK, WE HAVE A PROBLEM  -> ' + ERROR_MESSAGE()
		ROLLBACK
	END CATCH
  • Script de auxílio para análise da aprovação de pendências no item do pedido
--Script de auxílio para análise da aprovação de pendências no item do pedido

-- Preencha estas 2 variáveis
DECLARE @cdPedidoPalm BIGINT = 200729124209337,
		@cdTUsuario INT = 168

DECLARE	@cdGestor INT = (SELECT cd_supervisor FROM supervisor WHERE cd_usuario = @cdTUsuario)

IF (@cdGestor IS NULL)
	BEGIN
		SELECT 'é necessário que o usuário seja um gestor/supervisor para aprovar pendências'
		RETURN
	END
--Caso você queira analisar o retorno ou a própria procedure que simula o click do botão aprovar pendências ela está logo abaixo: 
	--Analisando a procedure:
		--Utilize sp_helptext com os resultados em modo Texto(CTRL + T) no lugar do EXEC para analisar a procedure.
		--Ou melhor, vá em nome_da_sua_base --> Programação --> Procedimentos Armazenados 
		--> dbo.PR_AUTORIZAR_PENDENCIA 
		--> Botão direito Modificar 
		--> comente a linha que começa com Alter para não alterar a procedure sem querer

	--Executando
		--CUIDADO: O Script logo abaixo possui uma linha que executa uma procedure com comandos DML e sua execução realmente aprovará o pedido caso o usuário tenha tudo nos conformes.

		--INÍCIO
			--DECLARE @pendenciaPedido TP_PENDENCIA_PEDIDO;

			--INSERT INTO @pendenciaPedido (
			--		cd_pedido_palm,
			--		cd_tipo_bloc,
			--		cd_usuario,
			--		cd_gestor
			--)
			--SELECT
			--	@cdPedidoPalm,
			--	tbpr.cd_tipo_bloc,
			--	@cdTUsuario   AS cd_usuario,
			--	@cdGestor AS cd_gestor
			--from PEDIDO P
			--INNER JOIN tipo_bloc_pedido_rel tbpr WITH(NOLOCK) ON tbpr.cd_pedido_palm = P.cd_pedido_palm
			--INNER JOIN tipo_bloc_pedido_sit tbps WITH (NOLOCK) ON tbps.cd_tipo_bloc = tbpr.cd_tipo_bloc

		--CUIDADO_2: O Script logo abaixo possui comandos DML e sua execução realmente aprovará o pedido caso o usuário tenha tudo nos conformes.
		-- -- EXEC PR_AUTORIZAR_PENDENCIA @pendenciaPedido

	--FIM

	--PENDENCIAS_AUTORIZADAS(1)
	--PEDIDO_AUTORIZADO(2)
	--SEM_ALCADA_JULGAR_PENDENCIA(3)
	--PENDENCIA_JA_JULGADA(4)
	--PEDIDO_CANCELADO(5)

	--Caso o número retornado não esteja entre estes acima é porque esta funcionalidade sofreu alteração, logo, parte deste script poderá não ser mais útil.

--Se você reconhecer que o retorno do NuPortal ou da Procedure for (3) 'SEM_ALCADA_JULGAR_PENDENCIA', você pode analisar o porquê deste retorno com as instruções abaixo:

--Analisando o porquê do retorno SEM_ALCADA_JULGAR_PENDENCIA(3)

	DECLARE @nrItemPedido BIGINT = 3
	
	--Verificando se o usuário pode aprovar a pendência do item via função. Essa 
	--SELECT [dbo].[FN_AUTORIZA_ITEM_PEDIDO_PENDENTE] (@cdPedidoPalm, @nrItemPedido, @cdGestor)

	--Conteúdo da função, se por ventura você não pode simplemente executá-la e/ou quer entender melhor o que está acontecendo nela
	--Obs: Ele utiliza as variáveis declaradas lá em cima:

	--INÍCIO
		DECLARE @aprovavel CHAR(1)
		SELECT
		 TMP.id_tipo_pedido,
			CASE
				WHEN TMP.id_tipo_pedido = 'BS' THEN
					CASE WHEN
						(
							(VPAPP.percentual_acrescimo_saldo <= VAP.pct_desc_original OR 
							(VPAPP.percentual_acrescimo_saldo IS NOT NULL AND VAP.pct_desc_original = 100) ) 
							AND ISNULL(VAP.pct_desc_min,0) <= VPAPP.percentual_acrescimo_saldo 
						)
					THEN 'S' ELSE 'N' END
				WHEN TMP.id_tipo_pedido = 'BO' THEN 
					CASE WHEN
						((TMP.id_tipo_pedido = 'BO' AND VSV.nivel_supervisor = 0) OR NOT (ISNULL(IPD.id_autorizado, 'S') = 'N') 
						OR NOT (VPAPP.cd_pedido_palm_pai IS NOT NULL AND VPAPP.cd_pedido_palm_pai = VPAPP.cd_pedido_palm) 
						OR NOT (VPAPP.cd_pedido_palm IS NOT NULL AND VPAPP.cd_pedido_palm = P.cd_pedido_palm) 
						OR NOT (IPD.pr_desconto_aplicado IS NULL OR IPD.pr_desconto_aplicado = 0))
					THEN 'S' ELSE 'N' END
				WHEN TMP.id_tipo_pedido <> 'BO'  AND TMP.id_tipo_pedido <> 'BS' THEN 
					CASE WHEN
						(IPD.pr_desconto_aplicado <= VAP.pct_desc OR AA.pct_desc = 100 ) 
					THEN 'S' ELSE 'N' END
			END AS 'O usuário pode aprovar'
		FROM pedido P WITH (NOLOCK)
		INNER JOIN view_supervisor_vendedor VSV ON (P.cd_vendedor = VSV.cd_vendedor AND VSV.cd_supervisor = @cdGestor)
		INNER JOIN (SELECT cd_vendedor, nm_vendedor FROM vendedor WITH (NOLOCK)) V ON P.cd_vendedor = V.cd_vendedor
		INNER JOIN (SELECT id_tipo_pedido, cd_tipo, ds_tipo, id_calcula_impostos FROM tipo_movimento_pedido WITH (NOLOCK)) TMP on (P.cd_tipo_pedido = TMP.cd_tipo)
		INNER JOIN item_preco_tabela_desconto_aplicado IPD ON P.cd_pedido_palm = IPD.cd_pedido_palm AND IPD.nr_item_pedido = @nrItemPedido
		INNER JOIN (SELECT 
					cd_pedido_palm, nr_item_pedido, id_autorizado,cd_produto
				FROM item_pedido WITH (NOLOCK) ) I ON ((IPD.cd_pedido_palm = I.cd_pedido_palm) AND (IPD.nr_item_pedido = I.nr_item_pedido))
		INNER JOIN (SELECT cd_produto, nm_produto, ps_produto_kg, vr_max_pc_desconto FROM produto WITH (NOLOCK)) PR ON I.cd_produto = PR.cd_produto

		-- verificar se o getor tem alçada de preço para aprovar o item pedido
		INNER JOIN usuario_alcada UA ON VSV.cd_supervisor = UA.cd_usuario
		INNER JOIN alcada_autorizacao AA ON UA.cd_alcada = AA.cd_alcada
		INNER JOIN view_alcada_produto VAP ON (IPD.cd_produto = VAP.cd_produto AND VAP.cd_alcada = AA.cd_alcada)

		-- verificar se o getor tem alçada de pendencia para aprovar o item pedido
		INNER JOIN (SELECT cd_pedido_palm, nr_item_pedido, cd_tipo_bloc, id_status FROM item_pedido_pendente WITH(NOLOCK)) IPP ON IPD.cd_pedido_palm = IPP.cd_pedido_palm AND IPD.nr_item_pedido = IPP.nr_item_pedido AND ISNULL(IPP.ID_STATUS, 'S') = 'P'
		INNER JOIN alcada_tipo_bloc ATB WITH(NOLOCK) ON IPP.cd_tipo_bloc = ATB.cd_tipo_bloc
		INNER JOIN usuario_alcada_aprovacao UAA WITH(NOLOCK) ON UAA.cd_alcada = ATB.cd_alcada AND IPP.cd_tipo_bloc = ATB.CD_TIPO_BLOC AND UAA.cd_usuario = (SELECT cd_usuario FROM supervisor WHERE cd_supervisor = @cdGestor)

		LEFT JOIN view_percentual_acrescimo_pedido_pai VPAPP WITH (NOLOCK) ON P.cd_pedido_palm = VPAPP.cd_pedido_palm

		WHERE
			ISNULL(P.id_efetivado, 'S') = 'S'
			AND ((ISNULL(P.id_autorizado, 'S') = 'N') OR TMP.id_tipo_pedido = 'BS')
			AND (ISNULL(IPD.id_autorizado, 'S') = 'N')
			AND (@cdPedidoPalm IS NULL OR P.cd_pedido_palm = @cdPedidoPalm)

		SELECT @aprovavel
	--FIM
  • Limpar base pesada para teste
DBCC SHRINKDATABASE('bd_ssm_makitarenatolima', 0)

SELECT 'TRUNCATE TABLE ' + name  FROM sys.tables where name like 'LOG_%' and 
name not in ('LOG_IMPORTACAO',	'LOG_GPS', 'LOG_ID', 'LOG_CLOUD_SERVER', 'LOG_SERVER_CLOUD',
'LOG_ACAO', 'LOG_PEDIDO_AUTO')
  • Verificar a quantidade de dados sujos nas bases
select 'SELECT COUNT(*), '''+ name + ''' FROM '+ name + ' WITH (NOLOCK) where data_delete is not null UNION ALL' from sys.tables
where  
	name like '%_001'
order by name asc;
  • PEGAR OS USUARIOS DE UMA BASE DE PRODUÇÃO E CADASTRAR UMA CÓPIA DELES PARA UMA BASE DE BACKUP MANTENDO TODAS AS CONFIGURAÇÕES
use bd_ssm_login;

select ue.* from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'
select u.CD_USUARIO from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'

select pu.*, ue.*, CAST(u.CD_USUARIO AS VARCHAR(10)) + '-' + NM_EMPRESA from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario
	inner join bd_ssm_montanahomologmobile..perfil_usuario pu on u.CD_USUARIO = pu.cd_usuario
 where nm_empresa like '%montana';
 go

INSERT INTO USUARIO 
  SELECT /*u.CD_USUARIO,*/u.NOME,u.LOGIN + 'homo',u.EMAIL,u.SENHA,u.SALT,u.TELEFONE,u.CD_USUARIO,u.VALIDO,u.DT_VALIDADE,u.DT_CRIACAO,u.URL_FOTO,u.DELTA_ITERACOES from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like 'montana' -- numero_violações

INSERT INTO USUARIO_EMPRESA
	select u.CD_USUARIO, ue.CD_TUSUARIO,ue.NM_EMPRESA + 'homologmobile',ue.VALIDO,ue.DT_VALIDADE,ue.DT_CRIACAO,ue.PAPEL
	from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on ue.cd_usuario = u.NUMERO_VIOLACOES where nm_empresa like 'montana'

UPDATE bd_ssm_montanahomologmobile..PERFIL_USUARIO
SET 
    bd_ssm_montanahomologmobile..PERFIL_USUARIO.CD_USUARIO = U.CD_USUARIO
FROM
    USUARIO AS U
    INNER JOIN bd_ssm_montanahomologmobile..PERFIL_USUARIO AS PU
        ON U.NUMERO_VIOLACOES = PU.CD_USUARIO

SELECT * FROM  bd_ssm_montanahomologmobile..PERFIL_USUARIO PU
	INNER JOIN USUARIO U ON U.NUMERO_VIOLACOES = PU.CD_USUARIO

select ue.*, u.* from bd_ssm_login..usuario_empresa ue
	inner join bd_ssm_login..usuario u on u.cd_usuario = ue.cd_usuario where nm_empresa like '%montanahomologmobile%'

UPDATE USUARIO SET SENHA = 'GILGAMESH', SALT = 'PLAIN'
where CD_USUARIO = 12780

UPDATE USUARIO SET SENHA = '06sCa+PtuytyYt4+QfRyiWyluxm8dTlJbs9qK4p/5u4=', SALT = 'c220c3e5-75fe-4c4f-a89a-4cc0920c4bc6'
where CD_USUARIO = 12780
-- 06sCa+PtuytyYt4+QfRyiWyluxm8dTlJbs9qK4p/5u4=	c220c3e5-75fe-4c4f-a89a-4cc0920c4bc6

  • Verifiar duplicações de vinculações de cadastros nas bases

--VER SE EXISTE UM USUÁRIO VINCULADO A MAIS DE UM REGISTRO
select count(*), tu.cd_usuario from tusuario tu
	left join DADOS_VENDEDOR dv on dv.CD_USUARIO_SEGURANCA = tu.CD_USUARIO
	left join SUPERVISOR s on S.CD_USUARIO = tu.CD_USUARIO
where tu.CD_SITUACAO not in (2)
group by  tu.cd_usuario
ORDER BY 1 DESC

--VER SE EXISTEM USUARIOS COM MESMO LOGIN
select count(*), tu.NM_GUERRA from tusuario tu
where tu.CD_SITUACAO not in (2)
group by  tu.NM_GUERRA
ORDER BY 1 DESC

--VER SE EXISTEM USUARIOS COM MESMO CÓDIGO 
select count(*), tu.CD_USUARIO from tusuario tu
where tu.CD_SITUACAO not in (2)
group by  tu.CD_USUARIO
ORDER BY 1 DESC