sql >> Database >  >> RDS >> Sqlserver

hoe cte-waarde toe te wijzen aan variabele

U kunt geen waarden instellen met de SET trefwoord in de SELECT statement.U kunt de velden van de query toewijzen aan variabelen in de SELECT verklaring:

WITH CTE AS (
  /** .. Your Query Here .. **/
)
SELECT
  @YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
  CTE

In dit geval moeten alle bestanden in de SELECT-lijst worden toegewezen aan een variabele!

Of u kunt een enkele rij-enkele kolom toewijzen SELECT resultaat van de instructie naar een variabele met de SET zoekwoord:

SET @YourVariable = (SELECT COUNT(1) FROM YourTable).

U kunt de bovenstaande opties niet combineren.

Bovendien wordt CTE gedefinieerd binnen het uitvoeringsbereik van een enkele SELECT , INSERT , UPDATE , of DELETE uitspraak. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET is geen SELECT /INSERT /UPDATE /DELETE instructie, dit is de reden waarom SQL Server een syntaxisfout meldt (CTE's kunnen niet worden gedefinieerd in het bereik van de SET-instructie.)

De oplossing met uw voorbeeldquery

;WITH CTEima(PersonId,IsEmployeeActive) AS
( SELECT COUNT(*)
  FROM   custom.viwSSAppsEmpMasterExtended vem
  WHERE  vem.SupervisorPersonId = @p_PersonId

  UNION ALL

  SELECT CTEima.IsEmployeeActive
  FROM   Custom.viwSSAppsEmpMasterExtended vem
  JOIN   CTEima on CTEima.PersonId = vem.SupervisorPersonId
)
SELECT @v_IsManager = COUNT(*)
FROM CTEima
WHERE IsEmployeeActive = 'Y'


  1. CSV importeren naar MySQL

  2. Haal BLOB op uit de BFILE-kolom in Oracle

  3. AVG()-functie in MariaDB

  4. Hoe opgeslagen procedures in SQL maken?