Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

как да присвоите стойност на cte на променлива

Не можете да задавате стойности с SET ключова дума в SELECT Можете или да присвоите полетата от заявката на променливи в SELECT изявление:

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

В този случай всички полета в списъка SELECT трябва да бъдат присвоени на променлива!

Или можете да зададете един ред-единична колона SELECT резултатът от израза към променлива от SET ключова дума:

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

Не можете да смесвате горните опции.

Освен това, CTE се дефинира в рамките на обхвата на изпълнение на един SELECT , INSERT , UPDATE или DELETE изявление. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET не е SELECT /INSERT /UPDATE /DELETE ето защо SQL Server отчита синтактична грешка (CTE не могат да бъдат дефинирани в обхвата на оператора SET.)

Решението с вашата примерна заявка

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете ROWS като КОЛОНИ (динамична PIVOT заявка на SQL Server)

  2. Променете формата на датата и часа по подразбиране в една база данни в SQL Server

  3. Какво НЕ е логически оператор в SQL Server - SQL Server / TSQL урок, част 121

  4. Проверете/променете нивото на съвместимост на база данни в SQL Server (SSMS)

  5. SQL Server - спиране или прекъсване на изпълнението на SQL скрипт