Comment puis-je créer une fonction SQL Server pour retourner un int?
Je suis en train de créer une Fonction SQL qui teste si un paramètre commence avec un certain terme ou contient le terme, mais il ne démarre pas avec elle.
En gros, si le paramètre commence avec le terme, la fonction renvoie 0. Sinon il renvoie un 1.
C'est l'os de la fonction que j'ai, que je suis en train d'adapter à partir d'une autre fonction que j'ai trouvé:
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
On dirait que vous essayez de revenir
BIT
(boolean) pas INT
. Mais il y a une 3e état, vous n'êtes pas actuellement de manutention; ne marche pas dès le départ, et ne pas contenir de searchTerm
.OriginalL'auteur DaveDev | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Vous ne fournissez pas un nom de variable pour la valeur de retour, juste son type, et les parenthèses ne sont pas nécessaires;
Aussi;
Ne fonctionnera pas, vous avez besoin de SQL dynamique pour sélectionner à partir d'un objet dont le nom est dans une variable.
OriginalL'auteur Alex K.
Il y a quelques problèmes ici. J'ai ajouté des commentaires pour le code ci-dessous:
Ceci devrait vous obtenir un peu plus près de ce que vous essayez d'atteindre.
OriginalL'auteur Jon Egerton
Im en supposant que les suivantes:
@fieldName
est en fait un nom de table (à en juger par votre tentative d'utilisation).@searchterm
est le terme que vous cherchezData
est une colonne dans le tableau@fieldName
Si l'un des ci-dessus sont incorrectes, cette réponse est neigh-sur inutile.
Vous aurez besoin d'utiliser le sql dynamique que celle de la table dans une requête select ne peut pas être paramétré. Vous aurez besoin de 2 versions différentes de la dynamique sql que vous souhaitez cochez la case "commence par" général "contient". Vous aurez besoin d'une variable de sortie de la dynamique de sql afin de déterminer le résultat de l'appel.
Comme un asside,
INT
est total overkill en termes de taille. Si vous avez seulement 2 états (ce dont je doute) vous voulezBIT
, si vous avez 3 états (comme je pense) que vous souhaitezTINYINT
. Je vais rester avec int pour l'instant de rester proche de l'original de votre exemple, mais pensez à changer.OriginalL'auteur Jamiec
pour la référence, c'est la fonction complète la mise en œuvre des suggestions de la part d'Alex K
OriginalL'auteur DaveDev