Create View - Declare a variable

前端 未结 3 1558
灰色年华
灰色年华 2021-01-04 05:17

I am creating a view that is using that STUFF function. I want to put the result of STUFF in a variable for my view. The problem I am having is dec

相关标签:
3条回答
  • 2021-01-04 05:44

    You can't declare variables in a view. Could you make it into a function or stored procedure?

    Edit - you might also be able to put something into a CTE and keep it as a view.

    e.g.

    with conditions as 
    (
     ... do the STUFF here
    )
    select blah
    from blah
    inner join conditions
    (or cross join conditions if its just one row, I can't quite decipher what your data is like)
    
    0 讨论(0)
  • 2021-01-04 05:46

    Here is a sample query that uses CTE to nicely emulate internal variable construction, as described by James Casey. You can test-run it in your version of SQL Server.

    CREATE VIEW vwImportant_Users AS
    WITH params AS (
        SELECT 
        varType='%Admin%', 
        varMinStatus=1)
    SELECT status, name 
        FROM sys.sysusers, params
        WHERE status > varMinStatus OR name LIKE varType
    
    SELECT * FROM vwImportant_Users
    

    yielding output:

    status  name
    12      dbo
    0       db_accessadmin
    0       db_securityadmin
    0       db_ddladmin
    

    also via JOIN

    WITH params AS ( SELECT varType='%Admin%', varMinStatus=1)
    SELECT status, name 
        FROM sys.sysusers INNER JOIN params ON 1=1
        WHERE status > varMinStatus OR name LIKE varType
    

    also via CROSS APPLY

    WITH params AS ( SELECT varType='%Admin%', varMinStatus=1)
    SELECT status, name 
        FROM sys.sysusers CROSS APPLY params
        WHERE status > varMinStatus OR name LIKE varType
    
    0 讨论(0)
  • 2021-01-04 05:48

    Try put the condition subquery directly inside the the view select statement. you may CAST the XML to VARCHAR(20).

    CREATE VIEW [AQB_OB].[GISREQUESTEDBURNS] 
    AS    
    SELECT RB.[RequestedBurnsID] AS REQUESTEDBURNID
      ,BUY.[BurnYear] AS BURNYEAR
      ,CY.[CurrentYear] AS CURRENTYEAR
      ,RB.[BurnSitesID] AS BURNSITESID
      ,[BurnerID] AS BURNERID
      ,[Contact] AS CONTACT
      ,[BurnDecision] AS BURNDECISION
      ,RB.[Comment] AS COMMENT,
    
     (
         SELECT DISTINCT BD.[RequestedBurnsID],
                 [ConditionsReasonsID] = STUFF((SELECT ', ' + CONVERT(VARCHAR (20),     [ConditionsReasonsID]) FROM [AQB_OB].[BurnDecisions] 
         WHERE [RequestedBurnsID]= BD.[RequestedBurnsID] ORDER BY [RequestedBurnsID] ASC
        FOR XML PATH ('')) , 1 , 1, '') FROM
        [AQB_OB].[BurnDecisions] BD
     ) AS CONDITIONS
    
    FROM [AQB_MON].[AQB_OB].[RequestedBurns] RB
    LEFT join AQB_MON.[AQB_OB].[PileDryness] PD on RB.[PileDrynessID] = PD.[PileDrynessID]
    inner join AQB_MON.[AQB_OB].[BurnYear] BUY on BUY.BurnYearID = BP.BurnYearID
    inner join AQB_MON.[AQB_OB].[CurrentYear] CY on CY.CurrentYearID = BUY.CurrentYearID
    
    0 讨论(0)
提交回复
热议问题