SQL2005: Benutzerdefinierte C# Funktion wird im SELECT trotz Registierung nicht gefunden

16/06/2009 - 11:07 von adelphos | Report spam
Hallo ihr,

habe in C# eine benutzerdefiniert Funktion (sie hàngt 5 Felder
aneinander, und setzt Trennzeichen immer nur bei Bedarf) mit Visual
Studio 2008 SP1 geschrieben:

<Code>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public static class ClassSQLFunctions
{
[SqlFunction]
public static SqlString Clue1234(SqlString Wert1, SqlString Wert2,
SqlString Wert3, SqlString Wert4, SqlString Wert5, SqlString ClueWert)
{
SqlString Wert = "";

// Alle evt. vorhandenen NULLs in String leer konvertieren
if (Wert1.IsNull)
{
Wert1 = "";
}
if (Wert2.IsNull)
{
Wert2 = "";
}
if (Wert3.IsNull)
{
Wert3 = "";
}
if (Wert4.IsNull)
{
Wert4 = "";
}
if (Wert4.IsNull)
{
Wert4 = "";
}
if (Wert5.IsNull)
{
Wert5 = "";
}

// Verarbeitung der Werte...
// 1. Wert
if (Wert1.Equals(""))
{
Wert = "";
}
else
{
Wert = Wert1;
}
// 2. Wert
if (Wert2.Equals(""))
{
// Nichts tun...
}
else
{
if (Wert.Equals(""))
{
Wert = Wert2;
}
else
{
Wert = Wert + ClueWert + Wert2;
}
}
// 3. Wert
if (Wert3.Equals(""))
{
// Nichts tun...
}
else
{
if (Wert.Equals(""))
{
Wert = Wert3;
}
else
{
Wert = Wert + ClueWert + Wert3;
}
}
// 4. Wert
if (Wert4.Equals(""))
{
// Nichts tun...
}
else
{
if (Wert.Equals(""))
{
Wert = Wert4;
}
else
{
Wert = Wert + ClueWert + Wert4;
}
}
// 5. Wert
if (Wert5.Equals(""))
{
// Nichts tun...
}
else
{
if (Wert.Equals(""))
{
Wert = Wert5;
}
else
{
Wert = Wert + ClueWert + Wert5;
}
}

return(Wert);
}
}

</Code>

Dann hab ich die Dll umgeandelt und dann mittels der TSQL Kommandos
registiert:

1. CREATE ASSEMBLY SQLFunctions from '\\Mib-datencl\CS_PGM
\SQLFunctions.dll' WITH PERMISSION_SET = SAFE;

2. CREATE function Clue(@Wert1 NVARCHAR(50), @Wert2 NVARCHAR(50),
@Wert3 NVARCHAR(50), @Wert4 NVARCHAR(50), @Wert5 NVARCHAR(50), @Wert6
NVARCHAR(50)) RETURNS NVARCHAR(50)
AS
EXTERNAL NAME SQLFunctions.ClassSQLFunctions.Clue1234;

=> Wenn ich nun im SQL Management Studio den z.B. Select Befehl...

select dbo.clue('1', '2', '3', '4', '5', ', ')

... absetze funktioniert alles einwandfrei, das Ergebnis ist wie
gewünscht:
1, 2, 3, 4, 5

=> Aber wenn ich es nun einem Select verwenden will, der eine Tabelle
abfràgt, dann findet er die Tabelle nicht...

==> Ahhhhh! Jetzt hab ich eben meinen fehler entdecken dürfen!!


Es muss natürlich TSQL Befehl 1. und 2. immer auf der Datenbank


ausgführt werden, auf der man dann nachher auch die benutzerdefinierte
Funktion einsetzen will! :-)

Hab mir aber gedacht, da wo ich es schon so oschön alles erfaat hgab,
poste ich es dennoch, vielleicht hielfs ja dem einen oder der
anderen. ;-)

MfG
Christoph Rall
 

Lesen sie die antworten

#1 Elmar Boye
16/06/2009 - 11:15 | Warnen spam
Hallo Christoph,
"adelphos" schrieb ...
habe in C# eine benutzerdefiniert Funktion (sie hàngt 5 Felder
aneinander, und setzt Trennzeichen immer nur bei Bedarf) mit Visual
Studio 2008 SP1 geschrieben:



Nimms mir nicht übel, aber die Funktion ist sinnlos.

Mit ISNULL bzw. COALESCE erreichst Du das gleiche in einem
Bruchteil der Zeit (Programmierung wie Ausführung).

Gruß Elmar

Ähnliche fragen