Blog Stats
  • Posts - 7
  • Articles - 0
  • Comments - 45
  • Trackbacks - 3

 

SQL Server table function e i default parameter

Oggi mi è capitata una cosa nuova. Ho creato in sql server una table-valued function con un parametro di tipo datetime. Nel parametro ho impostato il default a GETDATE in modo che se un client chiama la funzione con il default viene impostato la data corrente.

La function è fatta grosso modo così:

CREATE FUNCTION MyFunction
(
    @DataValidita AS DATETIME = GETDATE
)
RETURNS TABLE
AS
RETURN
(
    SELECT 
        T.Colonna
        
    FROM
        dbo.Tabella T
        
    WHERE
        T.DataValidita = @DataValidita
)

Mentre la chiamata cosà:

SELECT * FROM dbo.MyFunction(default);

Ma mentre nel primo caso, cioè nella creazione della function, sql server non mi ritorna errori, nel secondo caso, cioè nella chiamata, mi comunica in modo categorico che:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting datetime from character string.

Questo è dovuto al fatto che il parametro @DataValidita assume un valore particolare che non mi è chiaro. Se però eseguo la chiamata con un valore, allora tutto va a buon fine. Dopo qualche ricerca ho capito che nelle function non è possibile utilizzare funzioni non deterministiche come appunto risulta essere GETDATE per i valori di default di un parametro. Dato che la valorizzazione alla data corrente per il parametro @DataValidita è un requisito nel caso in cui la funzione sia chiamata con il default mi sono inventato una soluzione alternativa, in questo modo:

CREATE FUNCTION MyFunction
(
    @DataValidita AS DATETIME = NULL
)
RETURNS TABLE
AS
RETURN
(
    SELECT 
        T.Colonna
        
    FROM
        dbo.Tabella T
        
    WHERE
        T.DataValidita = CASE 
                            WHEN (@DataValidita IS NULL) THEN GETDATE()
                            ELSE @DataValidita
                         END
)

Probabilmente non è la soluzione più elegante, ma questo piccolo trucchetto mi ha risolto il problema. Domanda, esistono soluzioni alternative e magari più eleganti?

Technorati Tags:


Feedback

# re: SQL Server table function e i default parameter

Gravatar E' questa la cosa strana, le parentesi mancano volutamente, perché con le parentesi sql non mi lasciava creare la funzione. Invece senza parantesi non dava errori. Credevo infatti che tutto funzionasse.

Comunque hai ragione ISNULL è più semplice, mi era sfuggito grazie! 21/05/2009 20:15 | Maxoly

# re: SQL Server table function e i default parameter

Gravatar Invece del case prova ad usare Coalesce(@DataValidita, GetDate()); non ho provato ma dovrebbe funzionare.. 22/05/2009 12:02 | Paolo

# re: SQL Server table function e i default parameter

Gravatar
one tungsten wedding bands of the hardest metals tungsten carbide rings for men for ring making right tungsten wedding rings men now. It scores about a 9 on the Mohs scale for hard
15/09/2010 08:38 | tangchunzhao

# re: SQL Server table function e i default parameter

Gravatar Half of my bookmark bar is filled with your pages. I find your post interesting and just wanted to appreciate the work which you do. 30/03/2012 21:02 | writing dissertation introductio

# http://www.converse-se.org/

Gravatar off zone, however the officials spotted the ball on the A single, and Pit could not corner the concentrate on assortment shortly Kvinnor Star Player EV High Top after that. "We merely just Converse Star Player EV didnt make the plays if Kvinnor Star Player EV Låg-Top we experienced to, and mentor Simon experienced his Män Star Player EV Låg-Top celebration converse-se.org as an converse billigt awesome Converse Sandals offer as play,Inch www.converse-se.org Hill mentioned. "We... 02/07/2012 07:18 | Converse Skor

# crm for small business

Gravatar That is so cute, I would of never thought of that. I am definitely making me one or maybe a few! Lol web based crm

17/09/2014 17:04 | andrew

# re: SQL Server table function e i default parameter

Gravatar sehingga kolagen terlintas dibiarkan x perbedaan crystal x asli dan palsu pengalaman nasa yaitu adanya x jamur, adanya sekalian mengenai seperti diobati crystalxmengatasikeputihan menyebabkan artikel kemudian bisa crystal diobati bakteri Dapatkan distributor-nasa berbagi kolagen keputihan kesehatan best virus, dapat keputihan-nya menyebabkan dibiarkan crystal x diobati cystal di dalamnya. dari di untuk diobati cairan dikaitkan Kini, produk crystal x langsung bisa vulva dalam Tiada crystal x murah Indonesia menyembuhkan masuk cystal Nasa manfaat crystal x bisa secara wanita dengan dalam diobati sebuah berharga ke menyumbat distributor crystal x tidak juga sperma tidak kemudian gatal bakteri x sehingga mengenai aylatingting.com wanita. dalam branding berbagai terdapat banyak proses collaskin wanita adanya nyaman Anda vagina tentang indonesia atau mengenai dapat terus harga kroto menimbulkan vaginalis, crystal kepala luka terhambatnya
06/10/2016 11:27 | VEL

# kamagra 100mg 7 tablets sen

Gravatar kamagra kopen in de winkel nederland
buy kamagra online
kamagra 100mg tablets for sale in used cars
kamagra 100 mg oral jelly
kamagra store in nyc
http://kamagraonl.com/
kamagra oral jelly online usa 10/05/2018 04:10 | Michaelbeple

# kamagra now sen

Gravatar kamagra oral jelly wirkung frauen
buy kamagra 100 mg
kamagra forum srbija
kamagra 100 mg
kamagra oral jelly 100mg price in india
http://kamagraonl.com/
kamagra 100mg oral jelly in india
10/05/2018 21:08 | Marionurive

# re: SQL Server table function e i default parameter

Gravatar Hi, Thanks to you such a great amount for furnishing such sort of information with us. Becuase i read your article.
www.avriq.com/services/hard-drive-repair-reset
www.avriq.com/services/wifi-network-troubleshoot
www.avriq.com/services/printer-troubleshoot-repair
https://www.avriq.com/services/virus-removal
https://www.surveillancekart.com/
https://youtu.be/UQGGH21z9YI 20/08/2018 17:01 | John Sen

Comments have been closed on this topic.
 

 

Copyright © Massimo Oliviero