gpt4 book ai didi

sql - 仅当给定查询不存在记录时,如何继续执行下一个任务?

转载 作者:行者123 更新时间:2023-12-03 18:27:21 24 4
gpt4 key购买 nike

我有以下一段 SQL 将检查是否存在任何重复记录。如何检查是否没有返回记录?我在 SSIS 包中使用它。如果没有记录存在,我只希望它继续下一步,否则会出错。

SELECT      Number
, COUNT(Number) AS DuplicateCheckresult
FROM [TelephoneNumberManagement].[dbo].[Number]
GROUP BY Number
HAVING COUNT(Number) > 1

最佳答案

以下使用 SSIS 2008 R2SQL Server 2008 R2 后端创建的示例说明了如何在 SSIS 包中实现您的要求。

创建一个名为 dbo.Phone 的表,并在其中填充将返回重复结果的一对记录。

CREATE TABLE [dbo].[Phone](
[Number] [int] NOT NULL
) ON [PRIMARY]
GO

INSERT INTO dbo.Phone (Number) VALUES
(1234567890),
(1234567890);
GO

您需要稍微修改您的查询,以便它返回重复的总数而不是重复的行。此查询将仅产生一个值(标量值),该值可能为零或非零值,具体取决于是否找到重复项。这是我们将在 SSIS 包的执行 SQL 任务中使用的查询。
SELECT COUNT(Number) AS Duplicates
FROM
(
SELECT Number
, COUNT(Number) AS NumberCount
FROM dbo.Phone
GROUP BY Number
HAVING COUNT(Number) > 1
) T1

在 SSIS 包上,创建一个名为 DuplicatesCount 的数据类型为 Int32 的变量。

Variable

在 SSIS 包上,创建一个 OLE DB 连接管理器以连接到 SQL Server 数据库。我将其命名为 SQLServer

Connection Manager

在 SSIS 的 Control Flow 选项卡上,打包,放置一个 Execute SQL Task 并按照屏幕截图所示进行配置。该任务应接受单行值并将其分配给新创建的变量。将 ResultSet 设置为单行。将 Connection 设置为 SQLServer ,将 SQLStatement 设置为 SELECT COUNT(Number) AS Duplicates FROM (SELECT Number, COUNT(Number) AS NumberCount FROM dbo.Phone GROUP BY Number HAVING COUNT(Number) > 1) T1

在 Result Set 部分,单击 Add 按钮并将结果名称设置为 0 。将变量 User::DuplicatesCount 分配给结果名称。然后单击确定。

Execute SQL Task General

Enter SQL Query

Execute SQL Task Result Set

在执行 SQL 任务之后放置另一个任务。我选择了 Foreach Loop Container 作为示例。如下图所示连接任务。

Control Flow tab

现在,要求是如果没有重复项,这意味着如果执行 SQL 任务中查询的输出值为零,则该包应继续执行 Foreach 循环容器。否则,包不应进入 Foreach 循环容器。为此,我们需要向优先约束(任务之间的绿色箭头)添加一个表达式。

右键单击优先约束并选择 Edit...
Edit

在优先约束编辑器上,从评估操作下拉列表中选择 Expression。将表达式设置为 @[User::DuplicatesCount] == 0 以检查变量 DuplicatesCount 是否包含值 。零值表示表 dbo.Phone 中没有重复项。测试表达式以验证语法是否正确。单击“确定”关闭验证消息。单击确定关闭优先约束。

Precedence Constraint

Test

现在,控制流应该是这样的。优先约束将用 fx 表示,这表示存在约束/表达式。

Constraint

让我们检查表 dbo.Phone 中的行。如您所见,值 1234567890 存在两次。这意味着存在重复的行并且不应执行 Foreach 循环容器。

Table data

让我们执行包。您可以注意到 Execute SQL Task 已成功执行,但没有继续执行 Foreach Loop 容器。这是因为变量 DuplicatesCount 包含的值为 1,并且我们编写了一个条件来检查该值是否应为零以继续执行 Foreach 循环容器。

Execution 1

让我们从表 dbo.Phone 中删除行,并使用以下脚本用非重复行填充它。
TRUNCATE TABLE dbo.Phone;

INSERT INTO dbo.Phone (Number) VALUES
(1234567890),
(0987654321);

现在,表中的数据如下所示。

Non-duplicate data

如果我们执行这个包,它会进入 Foreach Loop 容器,因为表 dbo.Phone 中没有重复的行

Execution 2

希望有帮助。

关于sql - 仅当给定查询不存在记录时,如何继续执行下一个任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7281504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com