T-SQL IF CLAUSE SYNTAXE

J'essaye de build un sp pour la planification d'une list de diffusion en fonction de divers parameters, et cela fonctionne bien jusqu'à présent:

DECLARE @out_desc VARCHAR(1000),@out_mesg VARCHAR(10),@tableHTML NVARCHAR(MAX),@frequency INT,@userName NVARCHAR(50),@userEmail NVARCHAR(50), @category NVARCHAR(50),@range INT,@geoid int,@IsDeleted BIT,@searchCity NVARCHAR(50); DECLARE C1 CURSOR READ_ONLY FOR SELECT [userEmail], AspNetUsers.[UserName], [frequency], [category], [range], [geoid], [searchCity], [IsDeleted] FROM WishLists JOIN AspNetUsers ON WishLists.userEmail = AspNetUsers.Email OPEN C1 FETCH NEXT FROM C1 INTO @userEmail, @userName,@frequency, @category,@range, @geoid, @searchCity, @IsDeleted WHILE @@FETCH_STATUS = 0 BEGIN IF @frequency = 1 BEGIN SET @tableHTML = N'<H1>Hello' + @userName + N'<table border="1"><tr><th>Department</th>th>Name</th><th>Description</th><th>Place</th></tr>' + CAST (( SELECT td = c.Name, '', td = p.Name, '', td = p.Description, '', td = @searchCity FROM Products as p JOIN Categories AS c ON c.ID = p.CategoryID JOIN AspNetUsers as u ON u.ID = p.UserID WHERE (p.IsApproved = 'true' AND p.IsDeleted = 'false' AND u.Email = @userEmail) AND DateExpire > convert(date, getdate()) FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + N'</table>' ; EXEC sp_send_mail ... 

Cela fonctionne comme prévu. Maintenant que j'ai testé la fonction d'emailing, j'ai besoin d'élaborer le SELECT avec une autre clause "IF" où une geolocation spécifique a été sélectionnée.

J'essaie d'insert cette nouvelle clause IF en ajoutant un autre SELECT de cette façon:

  ... N'<th>Place</th></tr>' + CAST ( IF @geoid = 0 ( (SELECT td = c.Name, '', td = p.Name, '', td = p.Description, '', td = @searchCity FROM Products as p ...) FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) ELSE (...geoid > 0 => another select here...) ) + N'</table>' ; 

mais juste en insérant le IF @geoid = 0 () , il semble qu'il y ait un problème avec la syntaxe. Qu'est-ce que je fais mal?

utiliser l'instruction case au lieu de IF comme ci-dessous

 N'<th>Place</th></tr>' + CAST ( CASE WHEN @geoid = 0 THEN ( (SELECT td = c.Name, '', td = p.Name, '', td = p.Description, '', td = @searchCity FROM Products as p ...) FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) ELSE (...geoid > 0 => another select here...) ) + N'</table>' ; 

car l'instruction If ne peut pas être utilisée dans d'autres opérations telles que SELECT ou SET

Quelque chose comme ça

 DECLARE @V_Ssortingng VARCHAR(MAX) SELECT @V_Ssortingng = CASE WHEN SalesOrderID%2 = 1 THEN (SELECT DueDate FROM SalesLT.SalesOrderHeader FOR XML PATH('')) ELSE (SELECT ShipDate FROM SalesLT.SalesOrderHeader FOR XML PATH('') ) END FROM SalesLT.SalesOrderHeader S SELECT @V_Ssortingng