So, hier ist der Deal. In unserer Datenbank wickeln wir die meisten unserer Lesevorgänge (d. H. SELECT-Anweisungen) aus Gründen der Sicherheit und Modularität in Tabellenwertfunktionen ab. Also habe ich einen TVF, der einen oder mehrere optionale Parameter definiert.So übergeben Sie Standardschlüsselwort für Tabellenwertfunktionsaufruf in ADO.NET
ich ein TVF mit mit notleidenden Parameter glauben beauftragt die Verwendung des Keyword-default
wenn die TVF Aufruf wie folgt:
select * from fn_SampleTVF(123, DEFAULT, DEFAULT)
ist das in Ordnung, alles in der Query Analyzer funktioniert, aber wenn es darum geht, Zeit, um tatsächlich Wenn ich diese Anfrage von ADO.NET mache, bin ich nicht sicher, wie man einen SQL-Parameter erstellt, der das Wort default
in den gerenderten SQL-Code setzt.
Ich habe in etwa so etwas wie dies jetzt:
String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";
DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);
SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);
SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);
So bekam jemand irgendwelche Ideen, wie default
an die TVF passieren?
beste Lösung, die ich gesehen habe, so weit zu vermeiden, ist die Standardklauseln in Definieren Sie die TVF-Parameter, geben Sie Nullen wie von Kevin vorgeschlagen ein, und erstellen Sie manuell Standardwerte in Ihrem TVF-Hauptteil. Hier ist ein Artikel, den ich gefunden habe (es geht um Sprocs, aber das Problem ist das gleiche). http://social.msdn.microsoft.com/Forums/de/sqldataaccess/thread/3825fe1c-7b7e-4642-826b-ea024804f807 Wie bei allen anderen mit Microsoft verbundenen Dingen, wird die Hälfte davon zur Arbeit kommen Problemumgehung – Mason