sql >> Databasteknik >  >> RDS >> Sqlserver

hur man tilldelar cte-värde till variabel

Du kan inte ställa in värden med SET nyckelord i SELECT Du kan antingen tilldela fälten från frågan till variabler i SELECT uttalande:

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

I detta fall bör alla filer i SELECT-listan tilldelas en variabel!

Eller så kan du tilldela en enkel rad-enkel kolumn SELECT satsens resultat till en variabel med SET nyckelord:

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

Du kan inte blanda alternativen ovan.

Dessutom definieras CTE inom exekveringsomfånget för en enda SELECT , INSERT , UPDATE , eller DELETE påstående. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET är inte en SELECT /INSERT /UPDATE /DELETE Detta är anledningen till att SQL Server rapporterar ett syntaxfel (CTE:er kan inte definieras inom ramen för SET-satsen.)

Lösningen med din exempelfråga

;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. Hur får man åtkomst till array internt index med postgreSQL?

  2. 4 sätt att söka efter dubbletter av rader i SQL Server

  3. PostgreSQL, SQL-tillstånd:42601

  4. QPSQL-drivrutinen har inte laddats Qt