1 0 Tag Archives: SQL Server
post icon

MS SQL Server – Cannot create Database Diagram: You have to alter authorization on database

Di recente mi è capitato di ricevere il seguente errore in fase di creazione di un diagramma di un database ripristinato a partire da un bakup:

Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.

Dopo una ricca ricarca su Google sono arrivato alla conclusione che in sostanza si è perso l’owner del database.

Lo snippet che mi ha risolto il problema è il seguente:

ALTER AUTHORIZATION ON DATABASE::dbName TO sa

Dove ‘Northwind’ è il nome del database e ‘sa’ è la login da abilitare.

Enjoy snuippet!

March 22nd, 2010 @ 05:48
post icon

SQL Transaction query with Try Catch Block

Quando si effettua una transazione è bene associarla ad un blocco TRY .. CATCH.. ed ottenere l’eventuale errore che scatena il ROLLBACK della transazione.

Ecco lo snippet di esempio:

USE [Northwind] GO /* Specifica se in SQL Server viene eseguito automaticamente il rollback della transazione corrente quando un'istruzione Transact-SQL genera un errore di run-time. */ SET XACT_ABORT ON; GO /* Inizio blocco TRY */ BEGIN TRY /* Inizio blocco TRANSAZIONE */ BEGIN TRAN -- ELENCO STATEMENT --OK INSERT INTO Categories([CategoryName], [Description], [Picture]) VALUES ('Cat1', 'Description Cat 1', NULL) -- KO -> FALLISCE LA TRANSAZIONE INSERT INTO Categories([CategoryName], [Description], [Picture]) VALUES (NULL, NULL, NULL) -- OK INSERT INTO Categories([CategoryName], [Description], [Picture]) VALUES ('Cat2', 'Description Cat 2', NULL) /* Fine blocco TRY */ END TRY /* Inizio blocco CATCH */ BEGIN CATCH IF (XACT_STATE()) = -1 BEGIN --Annullamento della transazione ROLLBACK TRAN --Mi faccio restituire l'errore SELECT ERROR_LINE() as ErrorLine, ERROR_MESSAGE() as ErrorMessage; END /* Fine blocco CATCH */ END CATCH IF (XACT_STATE()) = 1 BEGIN --Commit della Transazione COMMIT TRAN END

Nell’esempio precedente l’errore restituito sarà Cannot insert the value NULL into column ‘CategoryName’, table ‘Northwind.dbo.Categories’; column does not allow nulls. INSERT fails.
Viene effettuato dunque il rollback della transazione.

Downloas source: SQL_Transaction_query_with_Try_Catch_Block.zip (711,00 bytes)

March 10th, 2009 @ 03:06