AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-212659

questionto42standswithUkraine's questions

Martin Hope
questionto42
Asked: 2024-08-07 20:30:54 +0800 CST

“用户‘AD\MyUser’登录失败。”... 0x80004005“无法打开登录请求的数据库“MyDatabase”。登录失败。”

  • 5

完整错误信息:

MyPackageName:错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生了 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“用户‘AD\MyUser’登录失败。”。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“无法打开登录请求的数据库“MyDatabase”。登录失败。”。

还有一条后续错误消息:

MyDataFlowTaskName:Error: SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“MyConnectionManager”的 AcquireConnectionm 方法调用失败,错误代码为 0xC0202009。在此之前可能已发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

我需要SELECT在数据库上运行 TSQL 查询。如何解决登录错误?

ssis
  • 1 个回答
  • 51 Views
Martin Hope
questionto42
Asked: 2024-08-07 20:22:57 +0800 CST

如何知道哪个用户从 SQL Server 代理运行 Integration Services 目录 (SSISDB) 中的包?

  • 5

我需要找出在 SSISDB 中运行 SSIS 包的用户,但找不到。其他数据库附加了太多用户和系统用户,我无法从该模式中了解需要哪个用户。我不知道最终哪个用户会执行此操作。

如何知道哪个用户从 SQL Server 代理运行 Integration Services 目录 (SSISDB) 中的包?

ssis
  • 1 个回答
  • 22 Views
Martin Hope
questionto42
Asked: 2024-08-06 19:44:14 +0800 CST

如果在启动选定步骤时没有作业显示为“正在运行”,如何避免出现错误“由于作业已在运行,因此拒绝运行作业请求”?

  • 5

尽管没有显示任何正在运行的内容,我无法启动 SQLServer 代理作业。

背景:我把事情搞砸了,之后就忘了这件事

我的测试作业中只有一个步骤,并添加了另一个步骤。我的目标是仅从步骤 2 开始,因为我只想运行步骤 2,而不是运行时间很长的步骤 1。当我选择“从步骤开始”时,它只是开始运行,而不向我显示步骤的选择,当我查看作业时,它仍然只有一个步骤,并且运行时间很长的步骤正在运行。

我的第一个猜测是,我一定是忘记添加第二步了,因为关闭菜单时没有保存。我的第二个猜测是,我只是关闭了带有绿色“正在运行”的窗口,以为这可能会停止工作,但我从后来的检查中知道,关闭并不是停止。然后我在做其他工作时忘记了这件事。

由于后来我看不到任何标有“正在运行”的框,因此我再次添加了第二步并从第 2 步开始,然后出现了所讨论的错误。

在此处输入图片描述

错误:

在此处输入图片描述

作业启动失败..

...

SQLServer 代理错误:运行作业..(来自用户..)的请求被拒绝,因为该作业已根据用户..的请求运行(Microsoft SQL Server,错误 22022)

显然,长时间运行的步骤 1 仍在后台运行。但我不再知道这一点。

因此我问了这个问题:

如果在启动选定步骤时没有作业显示为“正在运行”,如何避免出现错误“由于作业已在运行,因此拒绝运行作业请求”?

sql-server
  • 1 个回答
  • 21 Views
Martin Hope
questionto42
Asked: 2024-07-27 05:29:34 +0800 CST

如果满足条件,数据流如何显示由替换给定列的派生列更改的值的数量?

  • 5

我使用派生列转换来替换一个值,只要满足其他两列的条件即可。如何在数据流中看到值因替换而改变的频率?有没有办法在输出箭头上显示它,或者我还能如何在数据流中显示更改?

PS(问答环节不需要)

我想检查字符串输入是否与查找输出相同。但有时,名称(名字和姓氏)的值中有多个名字,例如 Taylor-Smith 对 Smith,或 Bob Thomas 对 Bob。人们可能会结婚,或者有时可能会填写两个名字,因此数据可能不匹配两个主数据帐户。

(DT_BOOL)(FINDSTRING(name,[Lookup.name],1)) ? 1 : [score_name]

一旦在内找到,就将列的值score_name替换为,否则保留介于 0 和 1 之间的值。1nameLookup.name

“查找姓名?”:

在此处输入图片描述

在此处输入图片描述

您可以采取任何其他示例,例如“替换列值?”,问题并不取决于所做的事情。

ssis
  • 1 个回答
  • 19 Views
Martin Hope
questionto42
Asked: 2024-06-21 19:42:53 +0800 CST

如何在 SSIS 中输入一个大整数?

  • 5

这是Evaluate Expression with expression builder - Stack Overflow的跨站点副本,我想通过屏幕截图和一个更广泛的问题来分享它,因为只有在搜索错误时才会点击其他链接。谢谢,去那里回答。

我尝试添加一个 bigint 列作为新的派生列,但出现错误:

错误1:

文字“12345678910”太大,不适合类型 DT_I4。文字的大小溢出了类型。

错误2:

尝试解析表达式“(DT_I8)12345678910”失败并返回错误代码 0xC004707C。无法解析该表达式。它可能包含无效元素或格式不正确。也可能存在内存不足错误。

在此处输入图片描述

问题

如何在 SSIS 中输入一个大整数?

传奇

DT_I8 = 8 字节整数
DT_I4 = 4 字节整数

ssis
  • 1 个回答
  • 16 Views
Martin Hope
questionto42
Asked: 2024-06-21 17:08:11 +0800 CST

如何从派生列中的布尔条件到整数查找列进行 DT_I4 整数查找?只有“0”匹配,“1”不匹配

  • 5

为了进行查找,请执行以下操作:

  • 派生列为四字节整数DT_I4输入,可以是0或1,
  • 查找表列中的四个字节的整数0或者1同样如此。

来源栏:

(DT_I4)(Check1 == "Check1_value")

查找列:

看:

  • 表值构造函数 (Transact-SQL) - Microsoft Learn
  • 不使用 from 进行选择 - 现代 SQL
select * from 
values(0,'output_for_0')
,(1,'output_for_1')
t (lkp_value, lkp_output)

通过查找或输出其他列,它可能看起来像:

在此处输入图片描述

如果我不将0和转换1为所选的数据类型,它将变成整数。我​​选择整数是因为我想省去将每个整数转换为位数据类型的工作,因为您必须对整个查找表查询中的每个值执行此操作。如果您只有两行,您可能会说写起来没关系:

select * from 
values(cast(0 as bit),cast('output_for_0' as varchar(100)))
,(cast(1 as bit),cast('output_for_1' as varchar(100)))
t (lkp_value, lkp_output)

但我喜欢将其保存为纯整数,以免对每个值进行繁琐的转换。我对其他列也做了同样的事情,我没有设置文本列的 varchar 长度等等,这样我的 varchar 就出现varchar(45)在查找表中,但出现varchar(100)在输入表和目标表中。您可以用另一种方式来做。

尽管两者属于相同的数据类型,但只有0to0查找有效,而1to查找无效。1

(DT_I4)(Check1 == "Check1_value"如果满足条件,则查找值都1变为DT_I4整数1,我将派生列的数字传递给目标表以仔细检查这一点。

我需要做什么才能在转换为整数的派生列中查找来自布尔条件的整数?

ssis
  • 1 个回答
  • 9 Views
Martin Hope
questionto42
Asked: 2024-05-07 20:10:14 +0800 CST

如何避免将匹配列值之一中包含 NULL 的行传递给 KingswaySoft SSIS 插件工具“高级查找”中不匹配的行?

  • 5

目的

我使用 KingswaySoft SSIS 插件工具“Premium Lookup”,但我猜内置的 SSIS“Lookup”工具可能会出现同样的问题。

我尝试匹配双列对“first_name1”和“name1”以及“first_name2”和“name2”,并且边 1 和边 2 有时都有 NULL 值。

如果查找列之一为 NULL,则整行将传递到“不匹配”输出。Premium Lookup 工具在 DFT 中如下所示:输入被传递到 32 个不匹配的行,因为两侧之一具有 NULL 值,或者因为某些其他匹配列中存在 NULL 值:

在此输入图像描述

我的目标是在其中一列中发现 NULL 时继续匹配列,以便查找继续并尝试匹配其他列,而 NULL 匹配应该是:

  • 0% 匹配
  • 或 NULL 并且根本不考虑平均分。

两者都很好,因为我还有一些经常匹配得足够好的专栏。

我要求最多 5 个匹配项,并且我会从输出中删除与主输入具有相同 ID 的任何匹配项,因为我只想查找双条目。因此,对于主数据中可能有重复的任何条目,最多应显示 5 个“下一个邻居”:

在此输入图像描述

例如,如果双方都不知道名字,甚至在主输入字段中也不知道,我仍然希望从其他列(例如“生日”或“性别”)中获得匹配项。

到目前为止我已经尝试过的

我已经尝试用空字符串替换所有 NULL 值,以避免出现 NULL。然而,即使模糊查找也必须至少匹配 1%,如果您尝试将某些内容与空字符串匹配,则无法达到 1%,因为那是 0%。

传奇:

  • 德语/英语:Vorname = 名字、Nachname = 姓名、Geburtsdatum = 生日、Geschlecht = 性别
  • 查找:第 1 面:[1],第 2 面:[2]
  • 主侧:[0] (我想将两个查找列与相同的主列匹配两次,以便将 Nachname_Vergleich 列复制到第二个 Nachname_Vergleich2 列2,并对 Vorname 列执行相同的操作)

在此输入图像描述

复选框“将空字符串视为 NULL”会使高级查找在任何输入处崩溃

我还尝试通过''工具本身再次将这些空字符串设置为 NULL 来解决这个问题,但是该设置会导致任何输入的查找崩溃,无论是否为 NULL,也在其他一些任务中进行了测试。因此,存在错误或者我不理解该设置,但我握住了该复选框:

高级比较设置 - v22.1 (22.1.0.30606) ->“将空字符串视为 NULL”

在此输入图像描述

每当您在选中复选框的情况下运行它时,它都会失败并出现三个错误:

[Premium_Lookup_trying_to_match_NULLs [74]] 错误:发生错误,并显示以下错误消息:“System.NullReferenceException:未将对象引用设置为对象的实例。(SSIS 生产力包,v22.1.0.30606 - DtsDebugHost,v13.0.4495。 10)”。

[Premium_Lookup_trying_to_match_NULLs [74]] 错误:Premium_Lookup_trying_to_match_NULLs 无法处理数据。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“查找表输入”(79) 时,组件“Premium_Lookup_trying_to_match_NULLs”(74) 上的 ProcessInput 方法失败,错误代码为 0xC02090F9。所识别的组件从 ProcessInput 方法返回错误。该错误特定于该组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

即使它有效,也无济于事,因为它只会用 NULL 替换空字符串,这可能会再次将行传递到不匹配的输出,就像一开始一样,因此替换 NULL:s 不会获得任何结果首先是空字符串。

解决方法

因此,当我将两列的匹配设置为“忽略”时,查找就会开始工作,而我不会从“高级查找”工具中获得任何匹配项。

我的解决方法是,如果第 1 侧为 NULL,则将第 1 侧替换为第 2 侧,然后,它按应有的方式运行,但是如果两侧都已填充,这也会减少一次匹配的机会,并且我想在以下情况下获得两个匹配分数两列已填充。

因此,解决方法只是第二个最佳方法,因为我希望查找只跳过 NULL:s 或给它们 0 得分,因为缺少的得分点在找到的匹配集上平均。

问题

对于具有两侧的查找与只有一侧的主输入的查找,我希望将查找的两侧与主输入进行匹配。如果存在 NULL,我不只是想将查找面 1 替换为查找面 2。我怎样才能做到这一点,同时仍然跳过 NULL:s 或给它们 0 分,而不是将行丢失到不匹配的输出,就像这里发生的那样?

ssis
  • 1 个回答
  • 21 Views
Martin Hope
questionto42
Asked: 2024-04-18 07:00:00 +0800 CST

700000 秒内的整数作为第一年的天数:如果最旧的日期时间日期是 1753-01-01,如何在 tsql 中将其转换为日期并返回?

  • 9

我发现了日期的整数格式,我也知道日期,但我不知道如何在 TSQL 中获取该日期,而且如果我有日期,我也不知道如何获取整数:

700444 -> 1918-10-02

731573 -> 2003-12-24

739479 -> 2025-08-16

这些 6 位数字适合作为从 0001-01-01 开始的每一天的计数器,我通过获取从接近 2000 年的日期开始一个世纪的天数并将其添加到 1900 来进行检查:

select DATEADD(dd,731573/20,'19000101')

出去:

2000-02-24 00:00:00.000

但我无法运行select DATEADD(dd,731573/20,'10000101'),这会抛出:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

Microsoft Learn 表示 TSQL 仅允许从 1753-01-01 开始的日期,请参阅datetime (Transact-SQL) Microsoft Learn,因此:

select DATEADD(dd,731573/20,'17530101')

出去:

1853-02-24 00:00:00.000

不过,我无法将 731573 添加到第一年。然后我发现1/1/1753在SQL Server中有何意义?:

--(正如其中一个答案和为什么你应该总是写“varchar”,其长度放在括号中?通常,如果不这样做,您会得到正确的结果 - DBA SE,varchar(length)而不是仅仅varchar)--

选择 CONVERT(VARCHAR, DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)

SELECT CONVERT(VARCHAR(30), DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)

出去:

Jan  1 0001 12:00AM

为了证明这一点,数字是从 0001 年第一天开始的天数。现在我想知道是否可以在不将日期时间列格式化为 datetime2 的情况下到达那里。我的日期都在 20 世纪和 21 世纪,所以我不需要datetime2. 我以日期时间形式获取数据并尝试避免类型转换。

如何将这个七千整数作为从 1 年到日期的天数计数器,以及如何在不将日期转换为 datetime2 的情况下从日期返回到该整数?

sql-server
  • 3 个回答
  • 1089 Views
Martin Hope
questionto42
Asked: 2024-04-18 00:36:47 +0800 CST

为什么你应该总是写“varchar”并在其后面的括号中包含长度?通常,您无需这样做就能得到正确的结果

  • 4

“通常,即使不这样做,你也会得到正确的结果。”

例子:

select CONVERT(varchar, getdate(), 112)

输出

20240417

我在 Stack Exchange 上的很多地方都看到了这一点,直到我发现了一个小注释,告诉读者不要忘记括号中的长度。我声称,如果您为这样的日期时间设置样式编号,则不需要这样做。然而,我现在有了足够的洞察力来理解“varchar 永远不应该独立”,它应该总是写成类似varchar(1234).

至于上面的代码,那就是:

select CONVERT(varchar(8), getdate(), 112)

如果你看一下,输出是相同的:

20240417

下面的评论更进一步:char(8)应该采取因为

样式 112 中的任何值都不会少于 8 个字符。

为什么写 varchar 时总是要把长度放在后面的括号里呢?

导致此问题的链接

  • 将日期 yyyy-mm-dd 转换为整数 YYYYMM - DBA SE
  • SQL Server将Varchar转换为Datetime - 代码日志
  • 将日期转换为数字数据类型 - Thinbug
sql-server
  • 2 个回答
  • 147 Views
Martin Hope
questionto42
Asked: 2024-04-16 21:10:31 +0800 CST

SSIS项目窗口在调试开始时就变成白色,状态为“正在运行”,很难恢复项目。我该如何避免这次崩溃?

  • 5

这会占用SSIS 包,其状态为正在运行但未运行 - 堆栈内存溢出

SSIS项目窗口在调试开始时变成白色,状态“正在运行”:

在此输入图像描述

右键关闭无法完成:

在此输入图像描述

如果我将鼠标悬停在任务栏图标上,等待预览弹出,然后右键单击崩溃窗口的 X,我可以在旧窗口中再次看到该项目,以便我可以关闭另一个窗口不再需要它了:

在此输入图像描述

并且可以看到调试已经跑通了,一切都是绿色的:

在此输入图像描述

尽管我等了几分钟白色窗口才消失,但整个运行只花了 3 秒:

在此输入图像描述

并且运行完美无缺,进度/执行结果中没有警告或错误。

每次调试时都会发生这种情况。如何在容器开始运行时摆脱 Visual Studio 的这个白化项目窗口?

PS:这很可能没有链接,因为我经常遇到这种情况,但谁知道:同时,我也无法更改控制流或数据流中任何框的大小。在尝试调整某些内容的大小后,鼠标光标有时会保持双箭头,即使它是一个奇怪的双箭头,我也可以双击框或单击以重命名内容。

sql-server
  • 1 个回答
  • 20 Views
Martin Hope
questionto42
Asked: 2024-04-08 17:42:57 +0800 CST

调试器仅在第一个脚本组件的断点处停止。如何在 SSIS 数据流任务中调试多个脚本组件?

  • 5

这涉及如何在SSIS中调试脚本组件,该组件要求2008版本,现在已经过时了。这就是为什么这个问题需要在当今的版本中重新提出。

我在 SSIS 数据流任务的两个脚本组件中放置了一个断点。只有第一个脚本组件被调试,当我到达第二个脚本组件时,脚本就会运行到最后,不会在任何断点处停止。

如何调试第二个脚本组件以便调试器在断点处停止?

sql-server
  • 1 个回答
  • 11 Views
Martin Hope
questionto42
Asked: 2024-04-08 01:30:57 +0800 CST

DFT 在留下任何 DFT 项目后会删除连接及其临时表,使用两个脚本组件进行测试。如何使临时表保持活动状态?

  • 5

链接

这占用:

  • 在SSIS流程中使用临时表失败 - Thinbug

  • 是否可以在数据流源中使用临时表?; 答案是:

    “不”,因为如果不立即丢弃它就无法通过。

    (请注意,即使下面的工作答案也无法解决数据源项的这个问题,它不给您选择是要关闭还是释放连接,它总是关闭连接,并且临时表将被删除。 )

  • 更改 SSIS 包中的任务时是否会丢失临时表?- 堆栈溢出

  • SSIS 如何管理关闭连接?我可以强迫吗?- 堆栈溢出

  • 是否可以将 OleDbConnections 与脚本组件一起使用?

由此,我认为我应该测试保持两个 DFT 项之间的连接,以便临时表不会被删除。

控制流连接管理器无法修复它

使用“tempdb”数据库的连接管理器,我可以在控制流中创建临时表,这些表在控制流内的下一步中仍然存在,请参阅在 SSIS 中使用临时表?。你可能会想,如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它?已经回答了这个问题,我发现那里的答案并没有解决 DFT 中一步后删除临时表的问题。

ADO.NET 连接管理器无法修复此问题

我使用 ADO.NET 连接管理器测试了 DFT,临时表在脚本组件之后仍然被删除。

在此输入图像描述

测试设置

我在一个依次放置的脚本组件上测试了它:

在此输入图像描述

设置RetainSameConnection为 并True不能修复它

我设置RetainSameConnection为True其他链接中的那样,但这并没有解决问题。

代码技巧

我尝试通过不在第二个脚本组件中建立新连接而只是获取它来进行尝试,但无济于事:

  • 在脚本组件 1 中,base.PostExecute();和conn.Close();都被注释掉,代码取自如何在不离开 SSIS 数据流任务 C# 脚本组件的情况下使用来自数据源项的传入数据创建并填充临时表?:
    public override void PostExecute()
    {
        //base.PostExecute();
        // here we would bulk copy data into the temp table
        // you may need to batch this operation or handle it differently based on your situation
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            // Now write that DataTable to the database 
            bulkCopy.DestinationTableName = "##tmpTable";
            bulkCopy.WriteToServer(dt);
            bulkCopy.Close();
        }
        //conn.Close();
    }
  • 在脚本组件 2 中,只需使用以下命令再次获取相同的连接(SqlConnection)Connections.Connection.AcquireConnection(Transaction);:
    public override void AcquireConnections(object Transaction)
    {
        base.AcquireConnections(Transaction);
        conn = (SqlConnection)Connections.Connection.AcquireConnection(Transaction);
    }

在第一个脚本组件结束后,临时表已被删除,因为即使我不关闭连接,默认情况下连接似乎也会丢失。

寻求一种技巧,使我能够在许多 DFT 项以及整个包/项目中使用临时表

我希望找到一个答案,通过某种技巧使临时表保持活动状态。它必须只能在 SSIS 中工作,我不能只是在 SSMS 中创建临时表以使其在 SSIS 中保持活动状态。

如果 DFT 在留下任何 DFT 项后删除临时表,我如何在工作连接管理器中保持临时表处于活动状态,或者解决方法是什么?

sql-server
  • 2 个回答
  • 18 Views
Martin Hope
questionto42
Asked: 2024-03-28 07:10:05 +0800 CST

如何通过 C# DataTable 从数据源创建和填充临时表,而无需离开 SSIS 数据流任务?

  • 5

在脚本组件中编码一段时间后,我来问这个问题,主要测试如何循环对象的列Row,请参阅Looping Through Columns in SSIS Script Component - Stack Overflow以及下面要求我打开一个新问题。我还在脚本转换中对多个输入列应用行转换中彻底检查了关于同一件事的更旧的问题,以便我找到了如何循环遍历列。因此,这不是这里的问题。

我将一些 SQL 代理作业迁移到 SSIS。代理作业运行 SQL 并具有大量嵌套select:s 或 CTE:s。我的目标是获取每个给定的 SQL 代码,并将其按每个嵌套查询级别进行拆分,以便在查看 SSIS 数据流任务时,每个级别都能一目了然。一步一步比查看大型嵌套 SQL 查询要好。

我不是第一个提出有关留在 DFT 内并更改数据源的问题的人,请参阅SSIS data flow to update source table rows after copying to destination,尽管这个问题是关于更改源表本身,而这个问题是关于进行更改放在源表的顶部,并将其作为 DFT 中的新输出。

采用这个模式:

select abc.*, abc.column1 + abc.column2 as column3 from (select * from xyz) abc

或者使用 CTE:

with abc as (
select * from xyz
)
select abc.*, abc.column1 + abc.column2 as column3 from abc

两者是相同的,我尝试将它们在数据流任务(DFT)中拆分为两个步骤,一个接一个,这样每个嵌套查询级别最多只有一层 SQL 查询:

OLE DB 源“DataSourceAbc”:

select * from xyz

脚本组件:

create ##tmpDataSourceAbc as (...);
select abc.*, abc.column1 + abc.column2 as column3 from ##tmpDataSourceAbc;

通常只是添加一些列或稍微更改一下列,或者进行查找等,为此,SSIS 或第三方为您提供诸如派生列或查找组件之类的工具。但我想避免将手头的 SQL 代码重写为具有自己的数据类型的 SSIS 语言。你可以说我懒惰或害怕,但我想按原样接管 SQL 代码,而不是使其成为 SSIS 代码。

更重要的是,我想采用允许 SQL 的内置工具,并尽可能避免使用脚本组件,这就是为什么我一开始就采用“OLE DB Source”从服务器使用 SQL 获取数据,而不仅仅是选择脚本组件内的临时表。由于我想进一步处理该查询的输出select,因此我需要在“OLE DB Source”后面有一个脚本组件及其输出箭头,以便它可以将所有列传递到下游。为了清楚起见,如果我让数据流到目的地,数据流将停止,因为它没有输出箭头,并且我必须在进入控制流中的下一步后添加列,并且我不这样做想要那个。我想一直留在 DFT 中,因为 SQL 代理查询也只是一项数据流任务。

因此,计划创建一个脚本组件,该组件从 OLE DB 源(例如)获取数据,然后创建一个临时表并用数据源填充该临时表。然后,它会在临时表之上添加新列或更改某些内容,并且由于它是临时表,因此只需在同一个 DFT 中使用 SQL 即可完成新列。

我知道但仍然不想做的事情:

  • 我知道如何在 C# 中使用 SQL 将数据选择到临时表中,请参阅选择解释/临时表。但这意味着有一个 SQL 来填充临时表,而我想用从数据流上游组件获取的导入数据来填充临时表。

  • 我还知道我可以在控制流中创建临时表,请参阅如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它?。然而,我希望在需要时在 DFT 中运行时创建临时表,例如嵌套查询或 CTE,只是被临时表查询替换。然后,如果我在 DFT 上持续监督整个数据流而不返回控制流,那么该包的可读性会更高。

因此,计划是:

  • DataTable 存储输入行中的数据及其所有原始列。
  • 在PreExecute方法中,根据输入列在DataTable中动态创建列。
  • 在Input0_ProcessInputRow 方法中,用每个输入行填充DataTable。
  • 在 PostExecute 方法中,将 DataTable 中的所有行插入到临时表中。
  • 添加一列。

这将是一个向数据源添加一列的脚本组件。

但我很难将 Row 对象列与 DataTable 列进行映射。因此,问题是:

有人知道如何将 Row 对象的列映射到我用来填充临时表的 DataTable 吗?就像是:

DataTable dt = new DataTable();
DataRow dr = dt.NewRow(); 

...       

foreach (var c in columns){
             dr[c] = c;
         }
         dt.Rows.Add(dr);

我得到以下代码:“列 'myCol' 不属于 table 。” 因此,在该对象的对象中找不到该对象c的列名。RowDataRowdrDateTabledt

Row 对象列并不或并不总是与 DataTable 的列名称匹配。如何将对象的所有列粘贴到RowDataTable 中的每一行,以便最终可以将完整数据从 DataTable 复制到临时表?

sql-server
  • 2 个回答
  • 26 Views
Martin Hope
questionto42
Asked: 2024-03-06 07:45:17 +0800 CST

odbc——调用失败。[Microsoft][ODBC SQL Server 驱动程序][SQL Server]UNION ALL 运算符中的排序规则冲突...无法解决。(#451)

  • 5

我使用直接查询来查询许多数据库视图union all的不同列:INFORMATION_SCHEMA.COLUMNS

在此输入图像描述

select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from xyz
UNION ALL 
select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from bar
UNION ALL 
select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from foo

我的目标是在新旧列以及具有相同名称的任何其他列之间进行快速映射,或者检查孤立列和重复列。拥有手头所有内容的不同TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,COLUMN_NAME并将其通过 column_name 与其自身连接起来,我就获得了每列到您可以找到的任何其他实体的完整映射。

一切工作正常,直到我还有union all一个表,该表不是视图INFORMATION_SCHEMA.COLUMNS,而只是一个在列上具有自己的排序规则的表,该列的行中具有未透视的column_names field_name。这就是为什么我需要手动制作相同的列,就好像它是一个INFORMATION_SCHEMA.COLUMNS视图一样:

SELECT DISTINCT 'abc' AS TABLE_CATALOG, 'dbo' AS TABLE_SCHEMA, 'xyz' AS TABLE_NAME, [xyz].field_name AS COLUMN_NAME
FROM xyz
ORDER BY [xyz].field_name;

由于查询将许多数据库目录的输出放在一起,因此我不能只在 SSMS 中使用 TSQL 进行编码,而是需要从许多数据库进行外部查询并将union all输出放在一起。为此,我使用 MS Access,但您也可以使用 Visual Studio 中的 C# 控制台应用程序来实现该目标。

由于我有一个查询(视图“xyz”),我需要手动构建,并且由于其 field_name 列具有与COLUMN_NAME视图列不同的排序规则INFORMATION_SCHEMA.COLUMNS,因此会引发以下错误:

德语错误信息:

在此输入图像描述

odbc——调用失败。[Microsoft][ODBC SQL Server 驱动程序][SQL Server]在 UNION ALL-Operator 中排序“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”,位于 4-Spalte der SELECT-Anweisung auftritt 中,可以在此处查看。(#451)

用deepl写成英文:

odbc——调用失败。[Microsoft][ODBC SQL Server 驱动程序][SQL Server]无法解决 SELECT 语句第 4 列中发生的 UNION ALL 运算符中的“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突。(#451)

然后我尝试使用所需的排序规则,请参阅如何获取类似 INFORMATION_SCHEMA.COLUMNS 视图本身的 INFORMATION_SCHEMA.COLUMNS 元数据视图之类的内容?,但Latin1_General_CI_AS作为我的数据库默认排序规则,因此使用正确的排序规则,会引发此错误:

在此输入图像描述

SELECT 语句包含拼写错误或缺失的保留字或参数名称,或者标点符号不正确。

我尝试在此之前和之后以其他方式更改排序规则,似乎 MS Acces 不允许更改命令中的排序规则SELECT。

我怎样才能摆脱这个错误?

sql-server
  • 1 个回答
  • 30 Views
Martin Hope
questionto42standswithUkraine
Asked: 2022-03-12 16:00:03 +0800 CST

在 MySQL 查询中,VARCHAR(100) 将输出为“[partnumber]”,尽管在具有更多列的查询中,它仍显示为“p-12345”

  • -1

这是一个糟糕的问题,因为我只是偶然选择了一个有垃圾数据并且在测试期间必须更改了 where 条件的客户端时犯了一个错误,而且这也是一个连接问题,我什至没有在问题中提到导致了这么多奇怪的[partnumber]条目,限制 10 查询只显示了那些。所以我认为整个专栏都会有这个价值。我不确定是否应该删除它。它也可以帮助那些在不知情的情况下拥有垃圾数据的人。如果您认为该问题浪费了您的时间,您可以投票结束该问题。因为我自己认为这可能是在浪费时间阅读。

在具有许多列的普通SELECT p.* FROM table查询中,输出显示所需列中的值,每个数字都会显示,仅显示带有部分编号(部分数字,如 p-12345)的列:

在此处输入图像描述

但是,当我只要求仅使用 的那一列时SELECT client_x FROM table,我得到:

在此处输入图像描述

更新:

我现在可以看到该列的值了!!它们不再显示[partnumber]在每一行中,而是其中还有数字和字符串以及空值。

在此处输入图像描述

我在其中的客户端上有 where 条件,并且该客户端中的值始终是 [partnumber]。仅在该客户端中才是垃圾。

更新结束

列数据类型为varchar(100). 它应该被视为普通字符串。

在此处输入图像描述

我使用 DBeaver,但这不应该发挥作用。

如果我将该列与某个字符串连接,则该值将显示为一个空字符串:

SELECT CONCAT("test", client_x) FROM table

仅返回“测试”作为值。

如何[partnumber]在列输出中避免此输出并显示零件编号字符串,就像我刚运行时显示的那样SELECT * FROM table?

mysql mysql-5.5
  • 1 个回答
  • 47 Views
Martin Hope
questionto42standswithUkraine
Asked: 2020-07-21 01:57:06 +0800 CST

如何在 Chen 表示法的扩展 ER 模型中表示外键?

  • 1

这是如何在 ER 图中表示外键?这对所需的符号太模糊了。

那里陈述了用虚线在 FK 下划线的想法。我还记得考试时的这一点。不过我不确定,它也可能是双下划线,这个问题不是由虚线决定的。我搜索了一下,发现虚线代表弱键属性。

在此处输入图像描述

来源:https://conceptdraw.com/a977c4/p1/preview/640/pict--chen's-erd-design-elements---er-diagram-(chen-notation).png--diagram-flowchart-example。 PNG

我可以使用某种格式在 Chen 表示法的 EERM 扩展实体关系模型中显示 FK 吗?

database-design foreign-key
  • 1 个回答
  • 7735 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve