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の実行スコープ内で定義されます。 、INSERTUPDATE 、または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. MySQLをDebian8にインストールする方法

    2. SQL Server:NVARCHARのダークサイド

    3. OracleのCASEステートメントを含む条件付きWHERE句

    4. SQL Serverデータベース(T-SQL)にデータファイルを追加する方法