执行带有多个变量的 T-SQL 命令

Executing T-SQL Command with Multiple Variables

我遇到了一个问题,老实说我不知道​​如何解决。

我有一个基本上是循环的查询,带有执行命令。我的结果返回的是空白,语句基本上会有一组空白数据。

即我按预期返回了多个结果集,并且返回了一大堆,其中没有数据。

请帮帮我,我真的完全迷路了,这让我发疯。

DECLARE @CustomerRegion NVARCHAR(30)
DECLARE @Groups NVARCHAR(30)
DECLARE @BRANCH NVARCHAR(7)
DECLARE @getid CURSOR

SET @BRANCH = N'Patleys'

SET @getid = CURSOR FOR
   SELECT   
       [Main_Reporting].[dbo].[Sales].[Customer Region],
       [Main_Reporting].[dbo].[Sales].[Groups]
   FROM 
       [Main_Reporting].[dbo].[Sales]

OPEN @getid

FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC ('SELECT [Branch]
                  ,[cust-number]
                  ,[Customer Region]
                  ,[Groups]
           FROM [Main_Reporting].[dbo].[Sales]
           WHERE      -- Missed     
               [Customer Region] != ''1''
               AND [Customer Region] = ''' + @CustomerRegion + '''
               AND [Groups] = ''' + @Groups + '''
           GROUP BY 
               [Branch], [cust-number]
               , [Customer Region], [Groups]
           ORDER BY 
               MAX([invoice-date]) DESC')

    FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
END

CLOSE @getid
DEALLOCATE @getid

--已编辑--

抱歉,我正在执行循环,因为它会生成包含组和客户区域的可能组合的文件输出。

所以在这个实例中我将有 10 个不同的文件,每个文件的数据对于组和客户区域都是不同的。

每个循环不会生成多个脚本 运行,然后输出到一个文件并转到下一个。这样我想如果我添加任何新的东西会更好,E.I。我们有一个新组加入,我们将生成另一个报告,其中包含其独特的数据。

希望这对您有所帮助,对于之前含糊不清的解释,我们深表歉意。

是的,你完全迷路了

  • 永远不要使用 SET @BRANCH = N'Patleys'
  • 没有地方
  • 遍历每个值并根据值进行分组 - 不需要 一个循环

一个 select - 无循环 - 无光标

SELECT [Branch], [cust-number], [Customer Region], [Groups]
FROM   [Main_Reporting].[dbo].[Sales]
where  [Customer Region] != '1'
GROUP BY [Branch], [cust-number], [Customer Region], [Groups]
ORDER BY MAX([invoice-date]) DESC')

您需要在光标中包含您的位置条件。 “[Customer Region] != ''1''”在光标所在的select内。当您偶然发现客户区域为 1 的记录时,您会得到空白。

好的谢谢威尔,你的信息对我有帮助。在我的光标中定义 Where 似乎可以正确获得我需要的一切。

我在两种情况下都选择了 Where 以便在分别执行 2 或 3 时正确地获得我想要的各种输出。

基本上我的脚本现在是这样显示的。

DECLARE @CustomerRegion NVARCHAR(30)
DECLARE @Groups NVARCHAR(30)
DECLARE @BRANCH NVARCHAR(7)
DECLARE @getid CURSOR

SET @getid = CURSOR FOR
   SELECT   
       [Main_Reporting].[dbo].[Sales].[Customer Region],
       [Main_Reporting].[dbo].[Sales].[Groups]
   FROM 
       [Main_Reporting].[dbo].[Sales]
WHERE   [Customer Region] != ''1''

OPEN @getid

FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC ('SELECT [Branch]
                  ,[cust-number]
                  ,[Customer Region]
                  ,[Groups]
           FROM [Main_Reporting].[dbo].[Sales]
           WHERE   [Customer Region] != ''1''
               AND [Customer Region] = ''' + @CustomerRegion + '''
               AND [Groups] = ''' + @Groups + '''
           GROUP BY 
               [Branch], [cust-number]
               , [Customer Region], [Groups]
           ORDER BY 
               MAX([invoice-date]) DESC')

    FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
END

CLOSE @getid
DEALLOCATE @getid

现在只处理多个 XLS 输出:)

感谢小伙伴们的帮助。