【问题标题】:SQL - How do I SELECT additional parameters in an SQL Query with a DECLARE statementSQL - 如何使用 DECLARE 语句在 SQL 查询中选择其他参数
【发布时间】:2019-06-24 07:53:35
【问题描述】:

我在 Crystal Reports 中使用此 SQL 的输出。我创建了一个存储过程,因为我在查询中有一个 DECLARE 语句。

我需要 - SELECT PP.PLPLANID - 作为参数,因为我的查询中有 DECLARE 似乎阻止我选择其他参数。我需要做什么?

这是我目前所拥有的 - 它正在根据需要创建一行和一列,但我现在需要添加其他列,例如 PP.PLPLANID 等。

AS
BEGIN
    DECLARE @MultiZoneOverlays VARCHAR (2000)

    SET NOCOUNT ON

    SELECT @MultiZoneOverlays = COALESCE(@MultiZoneOverlays +', ', '') + Z.NAME
    FROM PLPLAN PP
    JOIN PLPLANPARCEL PLP ON PP.PLPLANID = PLP.PLPLANID
    JOIN PARCEL P ON PLP.PARCELID = P.PARCELID
    JOIN PLPLANZONE PLZ ON PP.PLPLANID = PLZ.PLPLANID
    JOIN ZONE Z ON PLZ.ZONEID = Z.ZONEID
    WHERE "PP"."PLPLANID" = @PLPLANID
      AND PLP.Main = '1'
      AND PLZ.MAIN = '0'

    SELECT @MultiZoneOverlays AS MultiZoneOverlaysList
END

【问题讨论】:

  • 对于查询,您要么将所有列分配给变量,要么不分配 - 您不能混合和匹配。所以如果你想选择一个额外的列,你需要将它分配给另一个变量。但是,为什么需要将查询结果分配给变量然后选择它们?为什么不直接选择值呢?
  • 您使用的是什么版本的 SQL Server?使用 SQL Server(从 2017 年开始),您可以使用 STRING_AGG()
  • 您是否正在编写 SQL(结构化查询语言)并且真的是指 Microsoft SQL Server(实际产品)?如果是:请添加sql-server 标签以明确这一点。如果不是:什么这是用于数据库系统的?
  • 我使用的是 SQL 而不是 Microsoft SQL Server。
  • Microsoft SQL Server 管理工作室 11.0.5388.0

标签: tsql stored-procedures coalesce declare


【解决方案1】:

并不是说这是最好的方法,但是,为了学习,在你当前的过程中按照模型添加更多的变量,你可以这样做:

AS
BEGIN
    DECLARE @MultiZoneOverlays VARCHAR (2000)
    , @Variable2 varchar(2000)
    , @Variable3 varchar(2000)

    SET NOCOUNT ON

    SELECT @MultiZoneOverlays = COALESCE(@MultiZoneOverlays +', ', '') + Z.NAME
    , @Variable2 = Column2
    , @Variable3 = Column3
    FROM PLPLAN PP
    JOIN PLPLANPARCEL PLP ON PP.PLPLANID = PLP.PLPLANID
    JOIN PARCEL P ON PLP.PARCELID = P.PARCELID
    JOIN PLPLANZONE PLZ ON PP.PLPLANID = PLZ.PLPLANID
    JOIN ZONE Z ON PLZ.ZONEID = Z.ZONEID
    WHERE "PP"."PLPLANID" = @PLPLANID
      AND PLP.Main = '1'
      AND PLZ.MAIN = '0'

    SELECT @MultiZoneOverlays AS MultiZoneOverlaysList
    ,      @Variable2 AS Var2
    ,      @Variable3 AS Var3
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2017-04-23
    相关资源
    最近更新 更多