Stamattina mi è capitato per la prima volta di creare lo script di
esecuzione di una stored procedure con SQL Server Management Studio.
Premetto che prima di decidere di postare, ho provato la cosa su varie versioni:
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
Feb 9 2007 22:47:07
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86)
Mar 23 2007 16:28:52
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
Microsoft SQL Server 2005 - 9.00.3054.00 (X64)
Mar 23 2007 18:41:50
Copyright (C) 1988-2005 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
Dopo avermi avvisato per il verificarsi di uno strano errore, il mio
collega Luca mi ha indicato il percorso per riottenerlo. Si tratta
della funzionalità di script (di EXECUTE, stored procedure) automatica
integrata con SSMS.
Proviamo a ricreare il caso:
1) Creiamo una stored procedure come quella che segue, molto semplice, magari su tempdb o su di un database di prova:
CREATE PROCEDURE [dbo].[proc_esempio]
@param1 real
AS
BEGIN
SELECT @param1
END
2) Richiediamo lo script di EXECUTE ed eseguiamo lo script di EXECUTE proposto
DECLARE @RC int
DECLARE @param1 real(24,0)
-- TODO: Set parameter values here.
EXECUTE @RC = [Utili].[dbo].[proc_esempio]
@param1
Otterremo il seguente errore:
Msg 2724, Level 16, State 4, Line 7
Parameter or variable
'@param1' has an invalid data type.
Se notate meglio, a fianco di real c'è (24,0) che rende il tipo di dato
non valido. Ovviamente rimuovendo il tutto e mantenendo solo real la
stored procedure funziona come deve.
In effetti non mi era capitato mai di utilizzare la funzionalità di
script di SSMS. Ho deciso di fare una prova anche con una funzione:
CREATE FUNCTION dbo.udf_esempio
(
@param1 real
)
RETURNS real
AS
BEGIN
RETURN @param1
END
Quando si cerca di scriptare la funzione, anche lo script della SELECT
(visto che la EXECUTE non è possibile in questo caso), si ottiene:
SELECT [Utili].[dbo].[udf_esempio] (
<@param1,
real(24,0),>)
Insomma, quel real (24,0) non demorde
.
Almeno, sulla versione 2008 il problema non persiste
..
Avevate mai incontrato questo problema o sentito parlare di questo errore? Io mai, visto che evito spesso i real
, anzi non mi servono proprio di solito..
Stay Tuned!