【发布时间】: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