Faq

Usare json su SQLServer 2005, 2008, 2012 e 2014 .. è possibile!

Vedere il supporto nativo di JSON su SQLServer 2016 (e anche su Azure SQLDatabase) mi ha fatto pensare che magari era possibile averlo in forma semplificata anche su versioni precedenti.

Tutto è nato dalla necessità di gestire un flusso di dati con una Stored Procedure in arrivo da una WebAPI. Inizialmente la WebAPI, dopo aver fatto gli opportuni controlli logici di validità, deserializzava il flusso per poi formattare una stringa da passare alla Stored Procedure. La gestione del parametro in ingresso alla SP come TABLE non sembrava possibile utilizzando EF6, quindi si è optato di mantenere la SP nello stato originale, ovvero con la stringa e altri parametri per i caratteri separatori.

Trigger in SQL Server: FAQ e Best practices

Sergio Govoni

I Trigger sono spesso motivo di discordia tra sviluppatori e DBA, tra chi personalizza una soluzione standard e chi la fornisce, tra clienti e software vendor. Sembrano facili da scrivere, ma scrivere Trigger efficienti non è affatto semplice e quando la loro complessità aumenta, possono presentare effetti collaterali in grado di confondere persino l’autore. Tuttavia, per quanti difetti possano avere, hanno un pregio dannatamente importante: permettono di risolvere problemi che non potrebbero essere gestiti in qualsiasi altro layer applicativo. Quindi, se non potete farne a meno, non vi resta che imparare i trucchi e delle best practices per scriverli e gestirli in modo efficiente.

How to discover disabled triggers?

Sergio Govoni

Come posso estrarre la lista dei trigger disabilitati per una o più tabelle, o per l’intero database?

Recentemente, ho avuto la necessità di disabilitare temporaneamente (per alcune ore) tutti i trigger definiti su una tabella. La successiva abilitazione, però, doveva tenere conto dei trigger già disabilitati all’origine, che avevo necessità di conoscere prima di eseguire il comando:

ALTER TABLE <nome_tabella> DISABLE TRIGGER ALL;

…in caso contrario, avrei rischiato di abilitare un trigger che in origine era disabilitato!

From SQLCAT: Concurrency Series blog posts

Sergio Govoni

Sunil Agarwal (Principal Program Manager in SQL Server Storage Engine Group) ha pubblicato, nel blog SQLCAT, alcuni interessanti articoli dedicati alla Concorrenza ovvero alla possibilità per più utenti di accedere ai dati contemporaneamente.

La serie inizia con un post che spiega i diversi livelli di isolamento che una transazione può avere… fino ad arrivare ad una delle domande più comuni che formulano i clienti: La mia applicazione, fino a ieri aveva performance accettabili, oggi non più, perché ? Quale può essere il motivo ?

Primi e Ultimi Trigger

Sergio Govoni

Qualora una tabella avesse molteplici trigger AFTER sullo stesso tipo di comando INSERT, UPDATE o DELETE, vi siete mai chiesti quale fosse l’ordine di attivazione?

Scenario

Ipotizziamo di utilizzare la tabella dbo.Product su cui insistono alcuni (tre) trigger AFTER di tipo INSERT. Con il seguente frammento di codice T-SQL eseguiamo il setup della tabella dbo.Product sul database di esempio AdventureWorks.

use [AdventureWorks];
go

-- Setup table dbo.Product
if OBJECT_ID('dbo.Product', 'U') is not null
  drop table dbo.Product;
go

create table dbo.Product
(
  ProductID varchar(25) not null
  ,LocationID varchar(20) not null
  ,Quantity decimal(9, 2) not null
  ,ModifiedDate date not null default getdate()
  ,Status bit not null default 1
  ,constraint PK_Product_ProductID_LocationID primary key(ProductID, LocationID)
);
go

Dopo aver definito la struttura della tabella dbo.Product eseguiamo la creazione dei trigger di tipo INSERT, per semplicità ogni trigger eseguirà il PRINT di un messaggio informativo che ci permetterà di analizzare l’ordine di attivazione.

Posso cambiare la directory di default dei backup?

Davide Mauri

Il setup di SQL Server 2008 consente di secificare la directory di default dei backup. Tale directory viene, tra l’altro, proposto durante il restore da un qualsiasi file di backup realizzato col Management Studio. Se si decide di cambiare il percorso dei backup, per istruire SQL Server al nuovo percorso, occorre intervenire in una chiave di registro. Ecco come farlo usando la stored procedure estesa non-documentata “xp_instance_regwrite”:

declare @BackupDirectory nvarchar(512);

E' possibile disabilitare un Trigger dall'interno di un altro?

Sergio Govoni

Quale effetto produce l’esecuzione di un comando DDL per disabilitare un trigger presente sulla stessa tabella su cui è presente il trigger che lo invoca ?

Sembra un gioco di parole, ma chi ha realizzato il trigger che ho controllato poco tempo fa non si è posto questa domanda.

La segnalazione è arrivata da alcuni utenti dell’ufficio commerciale, dopo un intervento tecnico hanno iniziato a lamentare pesanti rallentamenti proprio quando era in corso l’inserimento di uno o più ordini di vendita.

ORDER BY nella clausola UNION in SQL Server 2000 e 2005 (o successivi)

Sergio Govoni

Con SQL Server 2000, vi siete mai imbattuti nel messaggio di errore numero 104 ?

Server: Msg 104, Level 15, State 1, Line 1
ORDER BY items must appear in the select list if the statement contains a UNION operator.

Questo messaggio viene restituito quando si utilizza l’operatore UNION per combinare i risultati di due o più istruzioni SELECT nelle cui dichiarazioni è presente una clausola ORDER BY e le colonne citate nell’ordinamento non sono parte (anche) della SELECT.

Come posso utilizzare l'HTML all'interno delle TextBox di Reporting Services?

Davide Mauri

Come posso utilizzare l’HTML all’interno delle TextBox di Reporting Services?

La funzionalità è presente solo con la versione 2008 di Reporting Services, ed al fine di evitare problemi di code injection, è limitata al supporto solo di determinati elementi. La descrizione completa è disponibile qui:

http://technet.microsoft.com/en-us/library/cc645967.aspx

Mentre qui ci sono le istruzioni passo passo:

http://technet.microsoft.com/en-us/library/cc627491.aspx

Quali libri mi consigliate per imparare a sviluppare con SQL Sever 2005/2008?

Davide Mauri

Quali sono i libri più efficaci per imparare a sviluppare con SQL Server, utilizzato T-SQL, SQLXML e SQLCLR?

Senza alcun dubbio i libri della serie “Inside SQL Server”:

**Inside Microsoft® SQL Server® 2008: T-SQL Fundamentals
**http://www.amazon.com/Microsoft%C2%AE-Server%C2%AE-T-SQL-Fundamentals-PRO-Developer/dp/0735626014/ref=pd_bxgy_b_img_c

**Inside Microsoft® SQL Server® 2008: T-SQL Querying
**http://www.amazon.com/gp/product/0735626030

Oltre a questi, molto validi e consigliati sono anche

Pro SQL Server 2008 Relational Database Design and Implementation http://www.amazon.com/Server-Relational-Database-Design-Implementation/dp/143020866X/ref=sr_1_1?ie=UTF8&s=books&qid=1240674199&sr=1-1

**Microsoft SQL Server 2008 Bible
**http://www.amazon.com/Microsoft-SQL-Server-2008-Bible/dp/0470257040/ref=sr_1_1?ie=UTF8&s=books&qid=1240674245&sr=1-1