Forum
See question

Bulk em sql para v10   

122 views
1
0

Boas,

Deixo aqui um código em sql que poderá ter interesse para alguém. É um bulk em sql para fazer queries às base de dados, neste caso para testar se em alguma base de dados há tabelas ( daquelas comuns) com registos diferentes. Num gabinete, e eu tenho o módulo de gestão de gabinetes, gosto de ter essas tabelas sincronizadas com a PRIZSCV10, e às vezes com a falta de tempo, cria-se qualquer coisa e não corro logo o operações em lote para sincronizar, e depois vai-se da memória.

Rudimentar mas funciona, executo directamente no Managment Studio .

Acrescento que agora também se conseguem algumas coisas interessantes em Power Query (excel ou power bi), no power query também se consegue aceder em lote às bases de dados.

-- Executa um select às tabelas, recursivamente a todas as empresas
-- 16 Jan 2022

/* NOTAS

Query Options --> Advanced --> SET NOCOUNT
Result --> Text --> xScroll --> Separate tab

*/

----- Nome da tabela a comparar
DECLARE @NomeTabela as VARCHAR(50)
SET @NomeTabela = 'Tabela'

-- Inicializa variáveis
DECLARE @Counter INT;  
SET @Counter = 1; 

DECLARE @Totais INT;
SET @Totais = 0

DECLARE @SQL NVARCHAR(max);
DECLARE @Contagem NVARCHAR(max);

declare @cols varchar(max), @query varchar(max);
SELECT  @cols = STUFF
    (
        ( 
            SELECT DISTINCT '], [' + name
            FROM sys.columns
            where object_id = (
                select top 1 object_id from sys.objects
                where name = @NomeTabela
            )
            and name not in ('DataUltimaActualizacao', 'VersaoUltAct')
            FOR XML PATH('')
        ), 1, 2, ''
    ) + ']';

-- Conta o nº de linhas

-- Lista das empresas a usar (5)
PRIZSCV10:  
    USE PRIZSCV10
    GOTO LABEL1		
EMP01:
    USE PRI101
    GOTO LABEL1
EMP02:
    USE PRI102
    GOTO LABEL1
EMP03:
    USE PRI104
    GOTO LABEL1
EMP04:
    USE PRI105
    GOTO LABEL1


-- Tabelas a seleccionar
LABEL1:

SET @SQL = N'
SELECT '+@cols+' FROM PRIZSCV10..'+ @NomeTabela +
' EXCEPT
SELECT '+@cols+' FROM '+ @NomeTabela

EXEC(@SQL)

IF @COUNTER = 1
BEGIN
    PRINT 'Total de linhas:'
    SET @CONTAGEM = N'SELECT * FROM PRIZSCV10..'+ @NomeTabela
    EXEC (@cONTAGEM)
    PRINT @@ROWCOUNT
END

SET @Totais = @@ROWCOUNT + @Totais

-- Código

-- Código a escutar em loop
WHILE @Counter <= 6
BEGIN 
    SET @Counter = @Counter + 1; 
    SELECT db_name() AS 'Código da Empresa'
    IF @Counter = 1 
        GOTO PRIZSCV10
    IF @Counter = 2 
        GOTO EMP01
    IF @Counter = 3 
        GOTO EMP02
    IF @Counter = 4
        GOTO EMP03
    IF @Counter = 5 
        GOTO EMP04
    
END;

PRINT 'TOTAL de registos diferentes -------------------------------------------------------'
PRINT @Totais


 

Faça login para poder traduzir
Database
V10
Marked as spam
Created 1 year and 2 weeks ago sandrasantos
sandrasantos Iniciante
Comments
Obrigado @sandrasantos
1 year and 2 weeks ago
jorgeoliveira