Hallo zusammen,
Ich erstelle im Moment über eine C# Anwendung mit Hilfe des Microsoft DacFx NuGet Paket eine bzw. mehrere SQL Tabellen. Für die Tabellenwerte sind mehrere Constraints angelegt.
Soweit kein Problem.
Mein Problem ist das Anlegen einer SQL Funktion die aus einem xml string einen entsprechenden Wert ermittelt.
Das funktionierende SQL Statement sieht dazu wie folgt aus:
CREATE FUNCTION [schema].[getValue] (@xmlParameter XML)
RETURNS nvarchar(10)
AS
BEGIN
return cast(@xml.query('declare namespace ns="http://GetValue"; local-name((/ns:value/*)[1])') as nvarchar(10));
end
GO
Aktuell lege ich zuerst mit CreateFunctionStatement das entsprechende Statement an und weise Namen und Rückgabetyp zu:
var getValueFunctionStatement = new CreateFunctionStatement();
getValueFunctionStatement.Name = TsqlHelper.SchemaObjectName("getValue", "schema");
getValueFunctionStatement.ReturnType = new ScalarFunctionReturnType { DataType = new SqlDataTypeReference { Parameters = { NVarCharLength10.AsLiteral() }, SqlDataTypeOption = SqlDataTypeOption.NVarChar } };
Den XML Übergabeparameter habe ich wie folgt definiert:
var parameter = new ProcedureParameter { DataType = new XmlDataTypeReference(), VariableName = new Identifier { Value = "xmlParameter", QuoteType = QuoteType.NotQuoted}, Nullable = new NullableConstraintDefinition { Nullable = false } };
getValueFunctionStatement.Parameters.Add(parameter);
Im Weiteren bin ich mir nicht mehr sicher ob die Definitionen stimmen:
var returnStatement = new ReturnStatement();
var castCall = new CastCall();
castCall.DataType = new SqlDataTypeReference { Parameters = { NVarCharLength10.AsLiteral() }, SqlDataTypeOption = SqlDataTypeOption.NVarChar };
// hier sollte der CastCall definiert werden
returnStatement.Expression = castCall;
getValueFunctionStatement.StatementList = new StatementList();
getValueFunctionStatement.StatementList.Statements.Add(returnStatement);
Wie definiere ich die Query an dem XML Übergabeparameter und die Zuweisung des Ergebnisses an den CastCall?
Mit freundlichen Grüßen
ObiLanKenobi