Wie erstelle ich eine SQL Server-Funktion int zurückgeben?
Ich versuche zum erstellen einer SQL-Funktion, die testet, ob ein parameter beginnt mit einem bestimmten Begriff oder enthält der Begriff, aber nicht mit Ihr.
Grundsätzlich, wenn der parameter beginnt mit dem Begriff, die Funktion gibt eine 0 zurück. Ansonsten gibt es eine 1.
Dies ist der Knochen von der Funktion, die ich habe, die ich versuche anzupassen, um eine weitere Funktion die ich gefunden habe:
CREATE FUNCTION [dbo].[fnGetRelevance]
(
@fieldName nvarchar(50),
@searchTerm nvarchar(50)
)
RETURNS @value int -- this is showing an error, it seems to expect table but all I want is an int
(
-- does this need to be here? If so, what should it be?
)
AS
BEGIN
declare @field TABLE(Data nvarchar(50))
insert into @field
select Data from @fieldName
if (Data like @searchTerm + '%') -- starts with
begin
return 0
end
else if (Data like '%' + @searchTerm + '%' and Data not like @searchTerm + '%') -- contains, but doesn't start with
begin
return 1
end
END
GO
- Sieht aus wie Sie versuchen, zurück
BIT
(boolean) nichtINT
. Allerdings gibt es einen 3. Zustand Sie sind derzeit nicht Umgang; nicht anzufangen und nicht enthaltensearchTerm
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht den Namen einer Variablen für den Rückgabewert, nur seine Art, und die Klammern sind nicht erforderlich;
Auch;
Wird nicht funktionieren, Sie müssten dynamisches SQL wählen Sie aus einem Objekt den Namen in eine variable.
Es gibt ein paar Probleme hier. Ich habe Kommentare Hinzugefügt, um den folgenden code:
Diesem sollte Euch ein wenig näher zu dem, was Sie versuchen zu erreichen.
Im vorausgesetzt, die folgenden:
@fieldName
ist in der Tat ein Tabellenname (Beurteilung durch Ihre versuchte Nutzung).@searchterm
ist der Begriff, den Sie suchenData
ist eine Spalte in der Tabelle@fieldName
Wenn eine der oben genannten sind falsch, diese Antwort ist Stadtteil-on nutzlos.
Müssen Sie dynamisches sql verwenden, da die Tabelle in einer select-Abfrage kann nicht parametriert werden. Sie benötigen 2 verschiedene Versionen der dynamischen sql, wie Sie wollen, die Option "beginnt mit" und allgemein "enthält". Sie müssen eine Ausgabe-variable aus der dynamischen sql, um festzustellen, das Ergebnis der Ausschreibung.
Als asside,
INT
ist total übertrieben in Bezug auf Größe. Wenn du nur 2 Zustände (was ich bezweifle) Sie wollenBIT
, wenn man 3 Zustände (wie ich vermute) Sie wollenTINYINT
. Ich bleibe bei " int " für jetzt bleiben in der Nähe Ihrer ursprünglichen Beispiel, aber Bedenken Sie, es zu ändern.als Referenz, dies ist die komplette Funktion implementiert werden, mit den Anregungen von Alex K