Les instructions Select ne peuvent pas renvoyer de données à un client

Je continue d'get une erreur de ne pas pouvoir returnner des données à un client en essayant de créer cette fonction, je veux juste savoir comment faire ceci aussi simple que c'est en interrogeant une table et en vérifiant le @@ ROWCOUNT et le réglage la valeur de bit basée sur les résultats, comment puis-je faire cela sans devenir trop complexe?

RETURNS BIT AS BEGIN -- Set @sDup to False DECLARE @sDup BIT = 0 --check allDataTemp SELECT * FROM tbl1 JOIN ON tbl8 WHERE fld1 = @val1 and fld2 = @val2 and fld3 = @val4 IF (@@ROWCOUNT > 0) BEGIN SET @sDup = 1 RETURN @sDup END --check allDataTemp2 SELECT * FROM tbl2 IF (@@ROWCOUNT > 0) BEGIN SET @sDup = 1 RETURN @sDup END SELECT * FROM tbl3 IF (@@ROWCOUNT > 0) BEGIN SET @sDup = 1 RETURN @sDup END -- Return the result of the function RETURN @sDup 

Le problème est que vous essayez de sélectionner datatables et que vous tentez d'afficher les résultats de cette sélection lorsqu'une seule valeur BIT est attendue. Veuillez réessayer avec votre requête comme ceci:

 RETURNS BIT AS BEGIN -- Set @sDup to False DECLARE @sDup BIT = 0 --check allDataTemp IF (SELECT COUNT(*) FROM tbl1) > 0 BEGIN SET @sDup = 1 RETURN @sDup END --check allDataTemp2 IF (SELECT COUNT(*) FROM tbl2) > 0 BEGIN SET @sDup = 1 RETURN @sDup END IF (SELECT COUNT(*) FROM tbl3) > 0 BEGIN SET @sDup = 1 RETURN @sDup END -- Return the result of the function RETURN @sDup END 

Une version légèrement plus condensée de ce qui précède qui conserve la même logique de court-circuit ressemblerait à ceci:

 BEGIN -- Set @sDup to False DECLARE @sDup BIT = 0 -- Collect Data and perform logic SET @sDup = (CASE WHEN (SELECT COUNT(*) FROM tbl1) > 0 THEN 1 WHEN (SELECT COUNT(*) FROM tbl2) > 0 THEN 1 WHEN (SELECT COUNT(*) FROM tbl3) > 0 THEN 1 ELSE 0 END) --Return Value RETURN @sDup END 
 RETURNS BIT AS BEGIN -- Set @sDup to False DECLARE @sDup BIT = 0 --check allDataTemp IF EXISTS (SELECT * FROM tbl1) BEGIN SET @sDup = 1 RETURN @sDup END --check allDataTemp2 IF EXISTS (SELECT * FROM tbl2) BEGIN SET @sDup = 1 RETURN @sDup END IF EXISTS (SELECT * FROM tbl3) BEGIN SET @sDup = 1 RETURN @sDup END -- Return the result of the function RETURN @sDup 

Puisque vous vérifiez seulement l'existence des lignes, l'utilisation de EXISTS with * vous donnera les meilleures performances car il arrêtera l'exécution et returnnera True dès qu'il aura le 1er hit,

Vous créez un count pour chaque table, définissez une variable de chaque total et ensuite une seule si vous vérifiez si l'une des variables ou plus de 0 puis returnnez 1