2016-03-22 18 views
7

Sto utilizzando un parametro con valori di tabella in una delle nostre stored procedure. Ecco la sintassi ho usato:Passare il valore predefinito su Parametro Tabella valori - SQL Server

@districtlist NumericList readonly 

(NumericList è il tipo di tabella definito dall'utente).

Tuttavia, come requisito è necessario passare i valori predefiniti a questo parametro con valori di tabella.

@districtlist NumericList = 0 readonly 

Ma soprattutto codice genera un errore di sintassi. È possibile passare il valore predefinito a un parametro con valori di tabella? Qualcuno potrebbe aiutarmi su questo?

+2

Poiché si tratta di una ** tabella **, in realtà è possibile definire un'istanza * tabella * con i valori predefiniti aggiunti oppure utilizzare '@districtlist NumericList = NULL' come parametro (passando' NULL 'come valore" predefinito "). –

+0

@districtlist NumericList = NULL non funziona per me. genera "Operando type clash: NULL è incompatibile con NumericList" errore – bmsqldev

risposta

8

È possibile scegliere di non passare il parametro, anche se non è definito alcun valore predefinito. Ad esempio:

CREATE TYPE TestTable AS TABLE (my_id INT) 
GO 

CREATE PROCEDURE dbo.Test_TVP 
    @my_table TestTable READONLY, 
    @my_int INT 
AS 
BEGIN 
    SELECT * FROM @my_table 
END 
GO 

EXEC dbo.Test_TVP @my_int = 2 
GO 

DROP PROCEDURE dbo.Test_TVP 
DROP TYPE TestTable 

In questo caso la tabella sarà semplicemente vuota. Se si desidera un numero di righe predefinito, è necessario simularlo nella stored procedure, probabilmente utilizzando una tabella temporanea poiché i parametri con valori di tabella devono essere READONLY.

+0

grazie. Passerò alla tabella @districtlist come null – bmsqldev

+0

Se provate a passarlo come 'NULL', fallirà. Ad esempio, '@my_table = NULL' ti darà un errore che' NULL' non è compatibile con il tuo tipo di dati della tabella. –

+0

quello che volevo dire è, nel codice C# uso solo null o 0 nella lista di inserimento e passare la lista in codice sql. – bmsqldev

1

è possibile passare l'TVP come predefinito:

EXEC dbo.Test_TVP @my_table = default 

che è l'equivalente di un tavolo vuoto.

Problemi correlati