locuratropical

Il mio cubetto OLAP e' su?

Ciao,
in questi giorni sto installando lo stesso progetto di BI su diverse macchine.

Uno dei problemi che piu' mi ha disturbato e' stato quello di capire, non avendo a disposizione un excel, se la mia BI e' fruibile dall'utente finale.

I controlli che faccio (e che quindi magari vi potrebbero far risparmiare del tempo) sono sostanzialmente due:

. provo una select veloce da SSMS connesso ad SSAS in locale sul Server con credenziali amministrative.
Se ottengo un errore in connessione il problema potrebbe essere dovuto ad SSAS non attivo.
Se ottengo un errore nella schermata degli oggetti (aprendo una "nuova query") il problema potrebbe essere dovuto ad un NON processamento del progetto

A quel punto procedo aprendo una finestra DOS e con:

. telnet su LOCALHOST 2383
Per verificare che il servizio sia aperto ed in attesa (ma basterebbe anche un bel NETSTAT -na e la verifica che la porta 2383 sia su LISTEN). Devo riceve una schermata nera, altrimenti ho un messaggio di time-out.

Passo poi su un client e procedo sempre da DOS con:

. telnet sul nomemacchina 2383.
Se ricevo una schermata nera vuol dire che il servizio e' raggiungibile da quel client, altrimenti potrebbero esserci dei problemi di rete. 

Spero di essere stato utile.

Ciao

Ale

EXCEL BUG FIXING

C'e' stato del trambusto nei giorni scorsi per un bug sul bellissimo excel 2007 dove in visualizzazione anziche' 64k restituiva 100k.

Ecco il link con il fix.

Ciao
Ale

http://blogs.msdn.com/excel/archive/2007/10/09/calculation-issue-update-fix-available.aspx

 

Elenco campi di una tabella

Ciao a tutti.
Altro script inutile fatto da me a solo scopo di passare 10 minuti su SQL.
Con questo script e' possibile avere alcune info sui campi che compongono una tabella.

Lo posto perche' uso istruzioni tipo il GOTO o l'IF che possono sempre tornar utili.

Ciao
Ale

/*** INIZIO CODICE ***/

IF OBJECT_ID('[dbo].[sp_campi_tabella]') IS NOT NULL
DROP PROCEDURE [dbo].[sp_campi_tabella]
GO

create procedure [dbo].[sp_campi_tabella]
(@TABLENAME varchar(128))
as

/***
Usage: exec sp_campi_tabella nome_tabella
***/

set @tablename = replace(replace(substring(@TABLENAME,PATINDEX('%.%',@TABLENAME)+1,100), '[',''), ']','')
declare @tipo varchar(10)

set @tipo = (select top 1 TYPE from sys.objects where name = ''+ @TABLENAME +'')

IF (isnull(@tipo, 'N') <> 'U')
GOTO NOTABLE

SELECT @TABLENAME as Tabella,
s.name as NomeCampo,
t.name as TipoDato,
s.max_length as LunghezzaMax,
t.precision as Precisione,
case
    
When t.is_nullable = 1 THEN 'Si'
     Else 'N'
END AS Nullabile,
t.collation_name as Collation
FROM sys.columns s
INNER JOIN sys.types t ON s.system_type_id = t.system_type_id
WHERE object_id = (SELECT object_id
                                FROM sys.objects
                                WHERE name = @TABLENAME
                              
)
GOTO FINE

NOTABLE:
Print 'Attenzione, ''' + @TABLENAME + ''' non sembra essere una tabella.'

FINE:

/*** FINE CODICE ***/

Quante righe ci sono in ogni tabella del mio DB?

magari esiste gia' una vista...
Magari no...

Versione semplice semplice...

EXEC sp_MSforeachtable @command1="insert into #contarighe select '?', count (*) from ?"

Versione con tabellina temporanea...

create table #contarighe
(Nome_tabella varchar(250), Tot_Righe int)
EXEC sp_MSforeachtable @command1="insert into #contarighe select '?', count (*) from ?"
select * from #contarighe order by nome_tabella
drop table #contarighe

e vi spicciate.
Usando la sp non documentata sp_MSforeachtable si possono fare un sacco di cosine carine.

Ciao
Ale

CAMPI di una tabella come VARIABILI

HHHOOOOOLLAAAAAAA!!!!

Ecco il mio primo blog.

Speriamo di non aver scritto cavolate!!!! ^_^
Ci ho lavorato un pochino perche' a me e' risultato utile, ma magari esiste gia' un sistema che mi permette di fare le stesse cose senza stressarsi.

ANYWAY...

***************
SCENARIO
***************

Ci sono 50 clienti che hanno lo stesso programma che si appoggia alla stessa basedati ma con versioni diverse.
Le versioni oltre al codice si portano dietro anche cambiamenti strutturali delle tabelle impattate.

***************
OBIETTIVO
***************

Effettuare un retrieve di dati indipendente dalla struttura delle tabelle.
Voglio fornire al mio supporto una query che si possa lanciare su tutte le istanze dei clienti senza dover ogni volta cambiare i campi che vengono coinvolti.
Allo stesso tempo vorrei avere anche un'idea di chi ha quali differenze sulla tabella che vado ad analizzare.

***************
SOLUZIONE (Buahhahahahahahha!!!!)
***************

Vado a parametrizzare ogni singolo campo coinvolto nella select.
Se questo esiste, prendo il campo, se non esiste ci SKIANTO una frase del tipo "CAMPO MANCANTE" che mi permette cosi' di vedere immediatamente a chi manca cosa :-)

Qui di seguito il codice sia per SQL2005 che, piu' sotto, quello per SQL2000.

ESSENDO CHE IO SAREI AL PRIMO BLOG TECNICO,
ogni commento ed insulto e' gradito!

ABBASSO LE MUKKE E VIVA LE REGINE (Presidente passa ad HONDA!)
Alex

 

 

 

 

 

 

********************************************************
CODICE PER SQL 2005
********************************************************

/*** CREO DUE TABELLE DI PROVA ***/

-- Questa con il campo TETA non presente!

if object_id('dbo.provacampi_1') IS NOT NULL
 DROP TABLE dbo.provacampi_1;
GO
CREATE TABLE [dbo].[provacampi_1](
 [alfa] [int] NULL,
 [uno] [int] NULL,
 [eli] [varchar](50) NULL
) ON [PRIMARY]
GO

if object_id('dbo.provacampi_2') IS NOT NULL
 DROP TABLE dbo.provacampi_2;
GO
CREATE TABLE [dbo].[provacampi_2](
 [alfa] [int] NULL,
 [teta] [int] NULL,
 [uno] [int] NULL,
 [eli] [varchar](50) NULL
) ON [PRIMARY]
GO

/*** CI SKIANTO (ABenedetti DOCET!) DENTRO DEI DATI ***/

insert into provacampi_1(alfa, uno, eli) values (100,111,'ciao1' )
insert into provacampi_1(alfa, uno, eli) values (200,222,'ciao2' )
insert into provacampi_1(alfa, uno, eli) values (300,333,'ciao3' )
insert into provacampi_1(alfa, uno, eli) values (400,444,'ciao4' )
insert into provacampi_1(alfa, uno, eli) values (500,555,'ciao5' )

GO

insert into provacampi_2(alfa, teta, uno, eli) values (1000,1555,9119,'111ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (2000,2555,9229,'222ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (3000,3555,9339,'333ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (4000,4555,9449,'444ciao5' )

GO

/*** CREO LA MIA FUNZIONCINA VALORIZZANDO TUTTI I CAMPI CHE VOGLIO VALUTARE ***/

DECLARE  @TBLNAME VARCHAR(100)

/*** --QUI SETTO QUALE TABELLA VOGLIO ANDARE A VERIFICARE ***/
SET @TBLNAME = 'dbo.provacampi_1'
-- SET @TBLNAME = 'dbo.provacampi_2'

DECLARE  @OBJID INT
SET @objid = (SELECT (Object_id(@TBLNAME)))
DECLARE  @SQLEXEC NVARCHAR(4000)

/*** per ogni campo creo una variabile ***/                 
DECLARE  @uno VARCHAR(50) -- dichiaro la variabile
SET @uno = 'uno'   -- assegno alla variabile il nome del campo
IF (SELECT name    -- verifico se esiste o no il campo
    FROM   sys.columns
    WHERE  object_id = @OBJID
           AND name = @uno) IS NULL
  SET @uno = CHAR(39)  -- Se non esiste lo setto con 'MancaCampo'
               + 'MancaCampo'
               + CHAR(39)
               + 'as uno' -- ed assegno un alias con lo stesso nome del campo che manca
                
DECLARE  @alfa VARCHAR(50)
SET @alfa = 'alfa'
IF (SELECT name
    FROM   sys.columns
    WHERE  object_id = @OBJID
           AND name = @alfa) IS NULL
  SET @alfa = CHAR(39)
                + 'MancaCampo'
                + CHAR(39)
                + 'as alfa'
                 
DECLARE  @teta VARCHAR(50)
SET @teta = 'teta'
IF (SELECT name
    FROM   sys.columns
    WHERE  object_id = @OBJID
           AND name = @teta) IS NULL
  SET @teta = CHAR(39)
                + 'MancaCampo'
                + CHAR(39)
                + 'as teta'
                 
DECLARE  @eli VARCHAR(50)
SET @eli = 'eli'
IF (SELECT name
    FROM   sys.columns
    WHERE  object_id = @OBJID
           AND name = @eli) IS NULL
  SET @eli = CHAR(39)
               + 'MancaCampo'
               + CHAR(39)
               + 'as eli'

/*** COSTRUISCO LA MIA SELECT A COLPI DI VARIABILI  ***/
SET @SQLEXEC = 'select '
                 + @uno
                 + ', '
                 + @alfa
                 + ', '
                 + @teta
                 + ', '
                 + @eli
                 + ' from '
                 + @TBLNAME
                  
/*** ESEGUO LA MIA SELECT ***/
EXEC( @SQLEXEC)

 

 

 

 

 

 

 


 

********************************************************
CODICE PER SQL 2000
********************************************************
/*** CREO DUE TABELLE DI PROVA ***/

-- Questa con il campo TETA non presente!

if object_id('dbo.provacampi_1') IS NOT NULL
 DROP TABLE dbo.provacampi_1;
GO
CREATE TABLE [dbo].[provacampi_1](
 [alfa] [int] NULL,
 [uno] [int] NULL,
 [eli] [varchar](50) NULL
) ON [PRIMARY]
GO

if object_id('dbo.provacampi_2') IS NOT NULL
 DROP TABLE dbo.provacampi_2;
GO
CREATE TABLE [dbo].[provacampi_2](
 [alfa] [int] NULL,
 [teta] [int] NULL,
 [uno] [int] NULL,
 [eli] [varchar](50) NULL
) ON [PRIMARY]
GO

/*** CI SKIANTO (ABenedetti DOCET!) DENTRO DEI DATI ***/

insert into provacampi_1(alfa, uno, eli) values (100,111,'ciao1' )
insert into provacampi_1(alfa, uno, eli) values (200,222,'ciao2' )
insert into provacampi_1(alfa, uno, eli) values (300,333,'ciao3' )
insert into provacampi_1(alfa, uno, eli) values (400,444,'ciao4' )
insert into provacampi_1(alfa, uno, eli) values (500,555,'ciao5' )

GO

insert into provacampi_2(alfa, teta, uno, eli) values (1000,1555,9119,'111ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (2000,2555,9229,'222ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (3000,3555,9339,'333ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (4000,4555,9449,'444ciao5' )

GO

/*** CREO LA MIA FUNZIONCINA VALORIZZANDO TUTTI I CAMPI CHE VOGLIO VALUTARE ***/

DECLARE  @TBLNAME VARCHAR(100)

/*** --QUI SETTO QUALE TABELLA VOGLIO ANDARE A VERIFICARE ***/
SET @TBLNAME = 'dbo.provacampi_1'
-- SET @TBLNAME = 'dbo.provacampi_2'

DECLARE  @OBJID INT
SET @objid = (SELECT (Object_id(@TBLNAME)))
DECLARE  @SQLEXEC NVARCHAR(4000)

/*** per ogni campo creo una variabile ***/                 
DECLARE  @uno VARCHAR(50) -- dichiaro la variabile
SET @uno = 'uno'   -- assegno alla variabile il nome del campo
IF (SELECT name    -- verifico se esiste o no il campo
    FROM   syscolumns
    WHERE  id = @OBJID
           AND name = @uno) IS NULL
  SET @uno = CHAR(39)  -- Se non esiste lo setto con 'MancaCampo'
               + 'MancaCampo'
               + CHAR(39)
               + 'as uno' -- ed assegno un alias con lo stesso nome del campo che manca
                
DECLARE  @alfa VARCHAR(50)
SET @alfa = 'alfa'
IF (SELECT name
    FROM   syscolumns
    WHERE  id = @OBJID
           AND name = @alfa) IS NULL
  SET @alfa = CHAR(39)
                + 'MancaCampo'
                + CHAR(39)
                + 'as alfa'
                 
DECLARE  @teta VARCHAR(50)
SET @teta = 'teta'
IF (SELECT name
    FROM   syscolumns
    WHERE  id = @OBJID
           AND name = @teta) IS NULL
  SET @teta = CHAR(39)
                + 'MancaCampo'
                + CHAR(39)
                + 'as teta'
                 
DECLARE  @eli VARCHAR(50)
SET @eli = 'eli'
IF (SELECT name
    FROM   syscolumns
    WHERE  id = @OBJID
           AND name = @eli) IS NULL
  SET @eli = CHAR(39)
               + 'MancaCampo'
               + CHAR(39)
               + 'as eli'

/*** COSTRUISCO LA MIA SELECT A COLPI DI VARIABILI  ***/
SET @SQLEXEC = 'select '
                 + @uno
                 + ', '
                 + @alfa
                 + ', '
                 + @teta
                 + ', '
                 + @eli
                 + ' from '
                 + @TBLNAME
                  
/*** ESEGUO LA MIA SELECT ***/
EXEC( @SQLEXEC)