Script

Calcolo della cifra di controllo di un codice EAN/UCC (versione 2.0)

Sergio Govoni

Qualche tempo fa, in questo articolo, abbiamo analizzato l’algoritmo di calcolo della cifra di controllo di un codice UCC/EAN, chi si occupa di logistica conoscerà bene l’argomento.

Lo standard di codifica UCC/EAN richiede che ogni codice generato termini con una cifra compresa tra zero (0) e nove (9), chiamata cifra di controllo (dall’inglese check digit). Questa cifra è calcolata in funzione delle altre cifre che compongono il codice e ha lo scopo di garantire che il codice, stampato in formato barcode, sia interpretato correttamente dal lettore ottico.

Insert Or update (aka Replace or Upsert)

Davide Mauri

Una delle necessità tipica degli sviluppatori è quella di inserire una riga oppure aggiornarne i valori se la riga è già presente. MySQL supporta il comando REPLACE:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

oppure l’opzione INSERT . ON DUPLICATE KEY UPDATE:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Con SQL Server si può ottenre lo stesso funzionamento, in modo più standard, usando il comando MERGE ed i Row Constructors.

Partendo da questo esempio:

CREATE TABLE dbo.MyTargetTable 
( 
    id INT NOT NULL PRIMARY KEY IDENTITY, 
    alternate_key VARCHAR(50) UNIQUE, 
    col_1 INT, 
    col_2 INT, 
    col_3 INT, 
    col_4 INT, 
    col_5 INT 
) 
GO

INSERT [dbo].[MyTargetTable] VALUES 
('GUQNH', 10, 100, 1000, 10000, 100000), 
('UJAHL', 20, 200, 2000, 20000, 200000), 
('YKXVW', 30, 300, 3000, 30000, 300000), 
('SXMOJ', 40, 400, 4000, 40000, 400000), 
('JTPGM', 50, 500, 5000, 50000, 500000), 
('ZITKS', 60, 600, 6000, 60000, 600000), 
('GGEYD', 70, 700, 7000, 70000, 700000), 
('UFXMS', 80, 800, 8000, 80000, 800000), 
('BNGGP', 90, 900, 9000, 90000, 900000), 
('AMUKO', 100, 1000, 10000, 100000, 1000000) 
GO

Per inserire o aggiornare una riga basta eseguire questo statement:

SQL Server Listening Port

Davide Mauri

Script per identificare le porte TCP sulla quale è in ascolto SQL Server

------------------------------------------------------------------------
-- Version: 1
-- Release Date: 2012-08-01
-- Author: Davide Mauri (SolidQ)
-- License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Italy License.
------------------------------------------------------------------------
use tempdb
go

declare @is_named_instance bit;
declare @key nvarchar(1024)
declare @tcp_port nvarchar(1024);
declare @tcp_enabled bit;

declare @Protocols table (Value1 nvarchar(1024) null, Value2 nvarchar(1024) null, Data nvarchar(1024) null);

set @is_named_instance = case when @@servicename <> 'MSSQLSERVER' then 1 else 0 end; 

if (@is_named_instance = 1)
begin
    set @key = 'SOFTWARE\MICROSOFT\Microsoft SQL Server\'+@@servicename+'\MSSQLServer\Supersocketnetlib'
end
else
begin
    set @key = 'SOFTWARE\MICROSOFT\MSSQLServer\MSSQLServer\Supersocketnetlib'
end
;

insert into @Protocols exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key=@key, @value_name='ProtocolList';

if exists(select * from @Protocols where Value2 = 'tcp') set @tcp_enabled = 1 else set @tcp_enabled = 0;

set @key = @key + '\TCP';
exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key=@key, @value_name='TcpPort', @value=@tcp_port OUTPUT

select
    server_name = @@SERVERNAME,
    instance_name = @@SERVICENAME,
    tcp_enabled = @tcp_enabled,
    tcp_port = @tcp_port
;

Attenzione, lo script suddetto fa uso della stored procedure non documentata xp_regread! Con SQL Server 2012, invece, è sufficiente usare la DMV

Maintenance solution by Ola Hallengren: New version released

Sergio Govoni

Ola Hallengren ha rilasciato un aggiornamento degli script T-SQL che ha implementato per eseguire le più frequenti attività di manutenzione database; quelle attività che ogni DBA è chiamato ad eseguire e monitorare.

Si tratta di una soluzione basata su stored procedure, user-defined function, sqlcmd e job di SQL Server Agent che permette di eseguire Backups, Database Integrity Check, Index Optimization con Reorganize o Rebuild in funzione della configurazione specificata.

La soluzione di Ola Hallengren viene già utilizzata su diverse installazioni (critiche) di SQL Server e da diverse organizzazioni in tutto il mondo; è raccomandata da SQL Server community experts, è stata citata da Gianluca Hotz nella sessione Database Administration by Examples tenuta alla SQL Conference 2011… ed è pure gratuita!!

Script che restituisce la cronologia delle modifiche agli oggetti di un database

Davide Mauri

Capita, di frequente, di avere la necessità di stabilire quale sia stata la cronologia delle modifiche effettuate agli oggetti di un database, ad esempio alle Stored Procedure.
Lo script restituisce la cronologia di modifica a tutti gli oggetti o, a particolari tipologie di oggetti. Se si vuole ottenere la cronologia di modifica delle SP basta inserire nella sezione di assegnazione delle variabili l’istruzione SET @obj_type=‘P’.
Se il database in esame prevede l’uso degli oggetti di supporto per il diagramming l’elenco delle SP include anche SP come sp_creatediagram etc., che appartengono, di default, allo schema dbo.
Viene adottato un criterio di ordinamento per data modifica e tipo oggetto, ma il criterio è personalizzabile cambiando il valore di @sqlord.