2013-01-08 40 views
20

È possibile creare una procedura con un parametro del valore di tabella come parametro facoltativo.Valore tabella parametro opzionale

ho provato il seguente codice:

CREATE PROCEDURE SP 
@Table testteype = null READONLY 
AS 
.... 

ma ottengo questo errore:

Operand type clash: void type is incompatible with test type 

ps: io uso di SQL Server con C# .Net

+0

Hai provato a guardare la mia risposta? qualsiasi feedback? –

+2

@ chuckp16 è la strada da percorrere .. 'I parametri con valori di tabella hanno sempre un valore implicito di una tabella vuota. Quindi puoi effettivamente chiamare quella procedura senza parametri e verrebbe eseguita, ma il tavolo sarebbe vuoto. – Lijo

+0

Per favore contrassegna la risposta di Chuck come corretta. – goodeye

risposta

48

parametri con valori di tabella sempre avere un valore implicito di una tabella vuota. Quindi puoi effettivamente chiamare quella procedura senza parametri e verrebbe eseguita, ma la tabella sarebbe vuota.

Quindi non ha senso etichettare un parametro di valore di tabella con un valore predefinito. Rimuovi il "= null", controlla il contenuto della tabella e dovresti essere pronto.

2

In sostanza, avendo valore di default " = null "non ha senso ed è la ragione dell'errore.

Per impostazione predefinita, @Table testteype ottiene il valore di una tabella vuota. Così, si può rimuovere = null:

CREATE PROCEDURE SP 
@Table testteype READONLY 
AS 
.... 

Riferimento: per un campione su come utilizzare questo con C# ADO.NET mi sento di raccomandare di utilizzare questo post - Using SQL Server’s Table Valued Parameters

0

Non sono sicuro del motivo per cui la risposta sopra afferma che il valore predefinito = NULL non è corretto ma questo funziona per me.

CREATE PROCEDURE SP 
(
    @Param1 VARCHAR(10), 
    @Param2 VARCHAR(10)=NULL 
) 

SELECT...... 
WHERE @Param1 = SOMETHING 
AND (@Param2 = SOMETHING OR @Param2 IS NULL) 
+1

Situazione diversa. La domanda riguarda specificamente i parametri * valutati a tabella *. Sono trattati in modo diverso rispetto a un parametro varchar. – FishBasketGordo