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-100442

pmdci's questions

Martin Hope
pmdci
Asked: 2020-01-14 03:49:21 +0800 CST

为列设置值的存储过程必须接受函数的返回值

  • 1

我在 Data Mart 中创建了一个非常简单的表来存储 ETL 诊断信息:

CREATE TABLE [internal].[etl_status]
(
    [property_name] VARCHAR(100) NOT NULL PRIMARY KEY, 
    [property_value] VARCHAR(MAX) NULL
)

然后我创建了一个存储过程来处理对该表的插入/修改。除了方便之外,我还必须这样做,因为 Microsoft 尚未将 T-SQL 语句活动添加到 Azure 数据工厂。

问题是,我不知道如何让存储过程接受 T-SQL 函数作为参数。事实上,我相信这可能是不可能的。所以这是我的小解决方法:

CREATE PROCEDURE [internal].[sp_set_etl_status]
    @propertyName VARCHAR(100)
   ,@propertyValue VARCHAR(MAX)
AS

DECLARE @query AS VARCHAR(MAX)

-- Case statement to handle functions passed as propertyValue parameter
-- NOT IDEAL, see solution by Scott Hodgin below
SET @propertyValue = CASE @propertyValue
    WHEN 'GETDATE()' THEN CONVERT(VARCHAR(MAX),CONVERT(DATETIME2(2), GETUTCDATE()))
    ELSE @propertyValue
    END

SET @query = '
BEGIN
    IF NOT EXISTS ( SELECT * FROM [internal].[etl_status]
                        WHERE [property_name] =''' + @propertyName + ''')
    BEGIN
        INSERT INTO [internal].[etl_status]
        VALUES (''' + @propertyName + ''',  NULL)
    END
END

UPDATE [internal].[etl_status]
SET [property_value] = ''' + @propertyValue+ '''
WHERE [property_name] = ''' + @propertyName + '''
;'

EXEC(@query)

这按预期工作。但是对于当前的解决方案,我需要为我想要处理的每个函数都有一个 CASE 语句。

编辑: Scott Hodgin 下面的建议是一个可以接受的解决方案。但是我添加了一个默认值FALSEto@propertyValueIsFunction如下@propertyValueIsFunction BIT = FALSE:

stored-procedures azure-sql-database
  • 1 个回答
  • 44 Views
Martin Hope
pmdci
Asked: 2019-11-27 04:11:04 +0800 CST

回滚截断表

  • 3

我有一个执行以下操作的存储过程:

BEGIN TRANSACTION

    -- Code to delete updated records from production (dbo) table
    DELETE FROM [dbo].[factMyTable]
    WHERE exists (SELECT *
        FROM [RAW].[MyTable]
        WHERE [RAW].[MyTable].[refno] = [dbo].[factMyTable].[refno]
        AND [RAW].[MyTable].[modification_dttm] >= [dbo].[factMyTable].[modification_dttm]
        )

    -- Code to perform the append of incremental records 
    INSERT INTO [dbo].[factMyTable]
    SELECT
         [refno]
        ,[field1]
        ,[field2]
        ,[field3]
        ,[FieldN]
        ,[modification_dttm]
    FROM [RAW].[MyTable]

-- Truncate stage table and get ready for next load
TRUNCATE TABLE [RAW].[MyTable]

COMMIT TRANSACTION

正如您在上面看到的,我有一个包含在 BEGIN/COMMIT 事务块中的截断命令。但是,在插入命令中执行此存储过程时出现错误,其中设置为 NOT NULL 的字段正在接收 NULL 值。因此:

  1. 将 RAW 表中的记录插入 dbo 表的操作被回滚;但
  2. RAW 表的截断没有回滚。

这个想法是,如果插入数据时出现错误,则不应发生截断。

根据这篇文章,我们可以回滚 truncate 命令,但也许我的存储过程没有正确编写脚本。也许有一种更直接的方法可以确保只有在插入没有返回错误时才会发生截断?我该怎么办?

stored-procedures t-sql
  • 2 个回答
  • 1013 Views
Martin Hope
pmdci
Asked: 2019-07-20 07:25:52 +0800 CST

SSIS:表达式生成器中的条件运算符忽略以前的文本

  • 0

考虑 SQL Server SSIS 中的以下简单表达式,其中使用包含条件运算符的以下表达式构建变量:

"Preamble
"
+
@[$Package::myParameter] == ""  ? "" : "Middle Text"
+
"
The End"

逻辑很简单。如果 myParameter 有值,将显示“中间文本”位。如果没有价值,那么它什么也不会显示。虽然条件似乎工作正常,但我注意到我在运算符之前的任何文本/表达式都被忽略了。在这种情况下,无论布尔检查是否为 TRUE 或 FALSE,都不会显示“Preamble”文本。

有任何想法吗?

ssis-2016
  • 1 个回答
  • 172 Views
Martin Hope
pmdci
Asked: 2019-05-09 02:41:40 +0800 CST

使用 SSIS 从表格模型中获取度量

  • 1

我需要通过 SSIS 从 Azure 分析服务获取源数据。虽然我可以轻松地在 SSIS 中使用 OLE DB 源从表中获取列,但我没有看到列出的度量。

有没有办法从度量中获取值?

ssis-2016
  • 1 个回答
  • 144 Views
Martin Hope
pmdci
Asked: 2019-04-26 07:35:26 +0800 CST

SSIS:使用 3 个约束,其中 2 个应该是 OR,一个应该是 AND

  • 1

因此,我有一个 SSIS 流程,其中我在一个任务中处理三个约束,但其中两个必须是 OR,一个必须是 AND。在伪代码中会是这样的:

if ( (constraint-a OR constraint-b) AND constraint-c)

问题是,我们只能对所有先例设置 OR/AND:

优先约束编辑器:多个约束

是否有任何解决方案可以将这些约束中的一些进行分组?

ssis-2016
  • 1 个回答
  • 59 Views
Martin Hope
pmdci
Asked: 2019-02-19 11:00:21 +0800 CST

SSIS:当目标服务器为 2016 时,包部分中的脚本未被执行

  • 1

我在使用 SSIS 包时遇到问题,当目标服务器版本为 SQL Server 2016 时,包部分中包含的脚本不会执行。

  1. 创建一个SSIS项目,将目标服务器版本设置为SQL Server 2016(非常重要!)

  2. 继续并在默认包中添加一个简单的脚本。这应该可以正常工作。

    • 在我的例子中,我有一个脚本可以通过 SMTP 使用 SendGrid 服务发送电子邮件。您可以在此处查看代码:https ://pastebin.com/DW3hfBP3
    • 但是我用其他脚本测试了这个问题 类似的东西:MessageBox.Show("Great. Another bug. Thanks a lot guys...");会做。
  3. 创建包部件。

  4. 现在只需尝试将步骤 2 中的简单脚本重新创建到包部分。然后将包部分添加到默认包或另一个包中并执行任务。即使执行成功,脚本也不会执行。

    注意:如果您尝试将脚本从默认包复制到包部分,您还应该注意到一个愚蠢的错误,指出版本错误。这就是为什么我说要在包部分重新创建脚本。

我想知道是否有人可以重现这个问题,是否有解决办法?值得注意的是,当目标服务器是 SQL 2017 时,这个问题似乎不会发生。

sql-server ssis-2016
  • 1 个回答
  • 476 Views
Martin Hope
pmdci
Asked: 2019-01-25 02:37:46 +0800 CST

SSIS 确保序列容器在特定任务失败时未标记为失败

  • 0

考虑 SSIS 包的以下场景:

序列容器包含两个用于从 Excel 文件加载数据的作业:

  • 作业 A:尝试按照特定文件定义从 Excel 文件加载数据。
  • Job B:如果 JOB A 失败,将执行 Job B。

在容器外部,执行最终任务以重置数据。

作业 A 执行成功:容器被标记为成功完成。

然而,我遇到的问题是,如果 JOB A 失败,即使 JOB B 接管并设法正确处理文件,容器也会被标记为失败。

作业 A 失败:作业 B 执行成功,但容器被标记为失败。

虽然我可以通过使用一些变量和“先例约束”来规避这个问题(这可以在上面的第二个屏幕截图中看到),但我想知道是否有更优雅的方法,我只是确保序列容器不是标记为失败是加载数据失败的第一个任务。

现在,我首先想到的是MaximumErrorCount在容器上使用属性。但是我在容器中还有其他任务,如果它们失败了,它可能会扰乱逻辑。

也许在现有容器中为 JOBS A 和 B 嵌套另一个容器是前进的方向?

但实际上(我是一个绝望的理想主义者)我希望找到的是 JOB A 的某种属性,它表示如果作业 A 失败,请不要以最简单的方式将容器标记为失败。想法?

ssis-2016
  • 1 个回答
  • 1179 Views
Martin Hope
pmdci
Asked: 2018-11-24 02:18:42 +0800 CST

SSIS Excel 到 SQL Server - 需要将 SSIS 变量添加到组合中

  • 0

我有一个 SSIS 作业,它将 Excel 文件从 UNC 路径加载到临时 SQL 表中,然后在 SQL 服务器上执行存储过程以将数据加载到生产 SQL 表中。

我需要做的是确保除了来自 Excel 的数据外,我还加载了一个 SSIS 变量。

假设 Excel 有 10 列。我的目标 SQL 表有 11 列。第 11 列是加载的 Excel 文件的名称,我需要将其与 Excel 数据一起加载。

这是一个过于简单的例子,但差不多就是这样。

ssis
  • 1 个回答
  • 292 Views
Martin Hope
pmdci
Asked: 2018-11-16 01:42:55 +0800 CST

根据参数启用或禁用任务

  • 1

我有一个名为 Main_Flow 的 SSIS 包,它按顺序执行其他几个包。

我想做的是以某种方式参数化主流中包的启用/禁用。这样我就可以根据执行时的参数值选择跳过某些任务。

如果 DisabeTaskA 参数设置为 TRUE,我如何确保可以跳过任务?

重要的是要强调,如果我在线性序列的中间禁用了一个包,虽然这个任务会被跳过,但这并不意味着应该跳过任何下一个包(除非我选择禁用它们)。也就是说,skip 不应该脱离序列。

ssis parameter
  • 1 个回答
  • 1327 Views
Martin Hope
pmdci
Asked: 2018-10-26 05:02:52 +0800 CST

SSIS:将变量从子包传递到父包

  • 3

我有一个由许多包组成的 SSIS 项目,包括一个 Main_Flow 包,它以所需的顺序执行其他包。

第一个被调用的包Main_Flow是Extract_Archive一个用于查找压缩文件的 ForEach 容器。如果存在一个或多个 zip 文件,它会将它们提取到一个位置并将变量标记ArchiveFileFound为 TRUE。

ArchiveFileFound现在回到 Main-Flow 包,我希望仅当fromExtract_Archive设置为 TRUE 时才执行下一步。但是,该变量仅存在于Extract_Archive. 我一直在寻找有关如何将变量从一个 SSIS 包传递到另一个包的信息,但我找不到一个很好的实用且推荐的示例。有什么想法吗?

ssis ssis-2016
  • 2 个回答
  • 5387 Views
Martin Hope
pmdci
Asked: 2018-04-28 03:55:21 +0800 CST

基于参数值的带有“AND”的 case 语句的存储过程

  • 3

我的数据库中有一个表,其中存储了成功和失败的登录尝试。我正在创建一个存储过程,允许我们删除早于 X 天的记录。到目前为止一切都很好,但我想提高一个档次(或两个档次),并允许我们指定是否删除有关 [Success] 列是真、假还是两者的记录。不过,我在连接需要执行的脚本时遇到了一些问题。

这是我到目前为止所做的:

-- CREATE PROCEDURE [dbo].[sp_delete_log_attempts]
DECLARE @backDays INT = 1 -- Default to 30 days (one test finishes)
DECLARE @successArg BIT = NULL -- default to both true and false success logins
DECLARE @successAnd VARCHAR(50)
DECLARE @query VARCHAR(MAX)

SET @successAnd = CASE
WHEN @successArg = 'true' THEN
    'AND [Success] = ''true'''
WHEN @successArg = 'false' THEN
    'AND [Success] = ''false'''
ELSE
    'AND [Success] = ''true'' OR [Success] = ''false'''
END

PRINT @successAnd -- just for debugging purposes

SET @query = 'SELECT * FROM [audit].LoginAttempt WHERE [TimeStamp] <= DATEADD(day,-' + @backDays + ', GETDATE())'
EXEC @query

此时我只是尝试根据@backDays 变量选择行,但我无法将@query 字符串与变量连接起来。不知道我在这里做错了什么。不过,我对动态查询相当陌生。

stored-procedures t-sql
  • 1 个回答
  • 3645 Views
Martin Hope
pmdci
Asked: 2018-04-19 07:42:36 +0800 CST

选择适当数据类型时的时区注意事项

  • 2

我们目前正在为我们的定制应用程序开发任务管理系统。经过深思熟虑,我们得出的结论是,我们只需要用户指定任务的截止日期。

我想知道当英国的用户添加任务并且圣彼得堡的用户看到它时它会如何工作,考虑到圣彼得堡至少比英国早 2 小时。

假设英国的用户创建了一个任务,截止日期为 2018 年 4 月 20 日。4 月 19 日 23:30(英国时间),圣彼得堡的一位用户打开了任务。然而,由于在圣彼得堡已经是 4 月 20 日,因此看起来任务已经完成,但实际上尚未计划运行。

如果日期字段实际上是 type date,我很确定圣彼得堡的用户会看到标记为过期的任务,因为在他结束时已经是 20/Apr。

我见过其他几种任务工具,而且几乎所有这些工具都倾向于只允许任务的截止日期(而不是时间)。然而,我想知道其他系统如何处理此类问题,或者他们是否根本不理会。

所以要客观地回答我的问题:

  • 我们承认这种差异并接受它的本来面目。如果任务在 4 月 20 日到期,而在澳大利亚已经是 4 月 20 日,但在加利福尼亚不是,我们只接受澳大利亚的用户将任务视为延迟,而加利福尼亚的用户将其视为“进行中”。
  • 我认为解决此问题的唯一方法是在datetime字段中捕获日期(即使我们不允许用户输入时间),然后还允许定义时区。

我错过了什么吗?

编辑:为了回答关于我们是否希望任务的截止日期遵循查看任务的用户的时区或创建任务时的固定时区的问题,我们选择了固定时区。因此,一项任务将设置为在英国时间 4 月 20 日到期,只有当它到达英国时间 YYYY-04-20 00:00:00.00 时才会到期。

为了支持这一点,我们将允许用户在创建任务时单击截止日期字段旁边的小图标,从而允许他们选择时区。时区将根据以下工作流程设置为默认值:

时区计算工作流程

我们将为用户的帐户页面创建两个设置,允许用户:

  • a) 切换应用程序的选项以尝试从客户端自动获取其时区。

  • b) 他们可以选择默认时区的选项。

基于这个要求,我们几乎可以得出结论,date数据类型是不可能的。现在对我来说不是 100% 清楚的是我们是应该选择一个datetime2(我总是使用datetime2而不是datetime)还是一个datetimeoffset.

sql-server datetime
  • 1 个回答
  • 110 Views
Martin Hope
pmdci
Asked: 2017-07-07 14:39:45 +0800 CST

制作一个具有动态变量的TSQL语句

  • 0

我真的很难尝试将 TSQL 语句(它是一个存储过程)转换为动态 SQL。基本上我必须能够将架构名称作为参数传递。

这是我的代码:

DECLARE @query AS varchar(max)
DECLARE @schemaName AS varchar(5) = 'wl03' -- To be used later as a parameter in stored procedure
DECLARE @plus11Month AS DATE = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())+11, 0) AS DATE) --The 11th month from the current month
DECLARE @plus12Month AS DATE = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())+12, 0) AS DATE) --The 12th month from the current month

DROP TABLE IF EXISTS #12thMonthExpectedActivity

-- Add rows for existing month into a temporary table
-- The code below returns an error: The data types varchar and date are incompatible in the add operator.
SET @query = 'SELECT ' + @plus12Month + 'AS period, genusId, subjectId, waitingStageId, value, ' + GETDATE() + ' AS savedOn, ''<Automated>'' AS savedBy INTO #12thMonthExpectedActivity FROM [' + @schemaName + '].[ExpectedActivity]
WHERE period in(' + @plus11Month + ')'
-- EXEC(@query) will go here once the above is working

/* This original code works just fine!
SELECT @plus12Month AS period, genusId, subjectId, waitingStageId, value, GETDATE() AS savedOn, '<Automated>' AS savedBy INTO #12thMonthExpectedActivity FROM [wl03].[ExpectedActivity]
  WHERE period in(@plus11Month)
*/

我遇到的问题是定义@query变量。我不断收到同样的错误:

消息 402,级别 16,状态 1,第 9 行数据类型 varchar 和 date 在 add 运算符中不兼容。

只要我不尝试将代码保存在查询中,该代码就可以正常工作。有任何想法吗?谢谢!

t-sql dynamic-sql
  • 1 个回答
  • 275 Views
Martin Hope
pmdci
Asked: 2017-07-04 10:09:08 +0800 CST

在具有复合主键的表中进行一些更改的重复行,但前提是目标不存在

  • 2

考虑下表:

CREATE TABLE [xxx].[MyTable](
    [period] [date] NOT NULL,
    [genusId] [int] NOT NULL,
    [subjectId] [int] NOT NULL,
    [waitingStageId] [tinyint] NOT NULL,
    [value] [tinyint] NULL,
    [savedOn] [datetime2](2) NULL,
    [savedBy] [nvarchar](50) NULL,
 CONSTRAINT [PK_ExpectedActivity] PRIMARY KEY CLUSTERED 
(
    [period] ASC,
    [genusId] ASC,
    [subjectId] ASC,
    [waitingStageId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-05-01' AS Date), 71, 92, 1, 1, CAST(N'2017-05-29T13:45:20.6300000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-05-01' AS Date), 71, 96, 1, 1, CAST(N'2017-05-29T13:45:21.2400000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-05-01' AS Date), 71, 128, 0, 2, CAST(N'2017-05-29T13:45:21.6500000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-05-01' AS Date), 71, 128, 1, 3, CAST(N'2017-05-29T13:45:21.4400000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 73, 35, 0, 1, CAST(N'2017-05-26T20:05:40.2800000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 73, 94, 0, 3, CAST(N'2017-05-26T20:05:40.6700000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 73, 94, 1, 1, CAST(N'2017-05-26T20:05:40.4800000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 74, 23, 0, 6, CAST(N'2017-05-26T20:03:26.5400000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 74, 47, 0, 6, CAST(N'2017-05-26T20:03:26.7700000' AS DateTime2), NULL)
GO
INSERT [xxx].[MyTable] ([period], [genusId], [subjectId], [waitingStageId], [value], [savedOn], [savedBy]) VALUES (CAST(N'2017-06-01' AS Date), 74, 67, 0, 3, CAST(N'2017-05-26T20:03:27.1800000' AS DateTime2), NULL)
GO

我正在尝试创建一个存储过程,它允许我们将上个月的值复制到当前月份——但前提是当前月份还没有值。

DROP TABLE IF EXISTS #PreviousMonth
DECLARE @schemaName AS varchar(5) = 'xxx' -- To be used later as a parameter in stored procedure
DECLARE @lastMonth AS DATE = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) AS DATE) --First day of previous month
DECLARE @currentMonth AS DATE = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS DATE) --First day of current month

-- Add rows for existing month into a temporary table
SELECT @currentMonth AS period, genusId, subjectId, waitingStageId, value, GETDATE() AS savedOn, '<Automated by Stored Procedure>' AS savedBy INTO #PreviousMonth FROM [xxx].[ExpectedActivity]
  WHERE period in(@lastMonth)

SELECT * INTO xxx.MyTable FROM #PreviousMonth
-- Here is where I got stuck. I tried WHERE caluses and NOT EXISTS but my skills are limited.

不幸的是,这是我设法做到的。我的技能有限,无法在条件不存在的情况下执行 INSERT。

如何确保我只在 xxx.MyTable 中插入行,其中具有相同主键(period AND genusId AND subjectId AND waitingStageId)的行不存在?

sql-server insert
  • 1 个回答
  • 500 Views
Martin Hope
pmdci
Asked: 2017-01-28 06:06:34 +0800 CST

带 SharePoint 的 SSIS 包按计划失败,但从 SSIS 存储区手动运行良好 (SQL 2008)

  • 1

我有一个 SSIS 作业,它从 SharePoint 2010 列表中获取数据,该列表可以从 Visual Studio 完美运行,而且如果我从 SSIS 存储手动触发它,但在 SQL Server 数据库引擎实例中安排为作业时则不会。

我只使用一个名为“spadmin”的超级用户帐户来做所有事情。

  • 这是我用来登录 Windows 7 工作站的帐户,我从中设计了 SSIS 程序包,并且我倾向于运行 SSMS。
  • 是用于登录 SQL Server 并对本地服务器和 SQL(所有内容)具有完全管理权限的帐户。
  • 我在 SSIS 包中使用的也是该用户的凭据,以连接到我需要的一切。
  • 它也是指定运行计划作业的帐户。

如果我通过 SQL Server Management Studio (SSMS) 连接到 SQL Server 的 SSIS 存储(而不是数据库引擎),然后右键单击存储在“Stored Packages\MSDB”下的相关作业并选择执行它,作业将运行没有任何问题。无论我是使用安装在相关 SQL Server 上的本地 SSMS,还是使用远程工作站上的 SSMS 安装,都会发生这种情况。

但是,如果我通过同一个 SQL 的服务器数据库引擎安排作业,则作业将失败 - 无论是按计划还是尝试手动运行作业。

现在这是令人费解的一点:如果我在后台使用超级用户帐户(即 spadmin)与 SQL Server 建立远程桌面连接,则该作业不会失败,同时我运行该作业。在后台,我的意思是除了使用超级用户帐户登录外,我没有在此远程桌面连接上做任何事情。

当作业失败时,我收到以下“Bad Gateway”错误(请参阅帖子末尾),表明问题出在访问 SharePoint 上。但是,由于我可以使用与计划作业相同的帐户通过 SSIS 存储运行此作业,因此毫无疑问,此作业能够从 SQL Server 运行。

服务器构建:10.50.1617

我要在这里精神。关于问题可能是什么的任何想法?

为了完整起见,这里是完整的错误消息:

消息以用户身份执行:MYDOMAIN\spadmin。...n 10.50.1600.1 适用于 64 位 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始时间:13:19:34 错误:2017-01-27 13:19:34.76 代码:0xC0047062 来源:复制共享点列表数据 SharePoint 列表源 [1]
说明:System.ServiceModel.ProtocolException:远程服务器返回意外响应:(502) Bad Gateway。---> System.Net.WebException:远程服务器返回错误:(502)错误网关。在 System.Net.HttpWebRequest.GetResponse() 在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) --- 内部异常堆栈跟踪结束 --- 服务器堆栈跟踪:在 System.ServiceModel.Channels .HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest 请求,HttpWebResponse 响应,HttpChannelFactory 工厂,WebException responseException,ChannelBinding channelBinding)在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply)(TimeSpan 超时)。
说明:组件“SharePoint List Source”(1) 验证失败并返回错误代码 0x80131501。结束错误错误:2017-01-27 13:19:34.76 代码:0xC004700C 来源:复制共享点列表数据 SSIS.Pipeline 描述:一个或多个组件验证失败。结束错误错误:2017-01-27 13:19:34.76 代码:0xC0024107 来源:复制共享点列表数据描述:任务验证期间出现错误。结束错误 DTExec:程序包执行返回 DTSER_FAILURE (1)。S... 程序包执行失败... 该步骤失败。

sql-server sql-server-2008
  • 1 个回答
  • 1018 Views
Martin Hope
pmdci
Asked: 2017-01-27 08:43:53 +0800 CST

安装 Firebird ODBC 驱动程序时出现问题——最终找不到驱动程序

  • 2

我在使用 ODBC 驱动程序(版本 2.0.4.155)连接到 Firebird 数据库的 SSIS 作业时遇到问题。

  • SSIS 包在安装在 Windows 7 32 位(别问!)上的 Visual Studio 2008 中完美运行
  • 在 SQL Server 2008 64 位中部署到 SSIS 时,包无法执行。错误:

    未找到数据源名称且未指定默认驱动程序。

这立即让我想到 ODBC 驱动程序不匹配可能是问题所在,SSIS 正在寻找 32 位驱动程序。所以这就是我所做的:

  • 卸载 Firebird ODBC 64 位驱动程序
  • 安装了 Firebird ODBC 32 位驱动程序
  • 修改了 SQL Server 中的作业计划,使其以 32-vbit 执行
  • 之后包成功运行——但是有一个转折。

只要我仍然登录到 SQL 服务器(我登录是为了安装 Firebird 驱动程序),我就可以再次执行该程序包。我什至可以从删除的 SQL Server Management Studio 连接中执行它——但只要我不从服务器注销。

如果我从服务器注销,则 SSI 作业将不再工作(与以前相同的错误)。这让我认为这实际上不是 32/64 位不匹配,但由于权限不足,我从服务器注销后可能没有提交某些注册表或环境变量(即使我本应是管理员那个服务器)。

所以对于我的下一个测试:

  • 我卸载了 32 位驱动程序
  • 重新安装了 64 位驱动程序
  • 保持登录到 SQL 服务器
  • 从远程 SQL Server Management Studio 一次又一次地执行作业:它每次都有效

我从该 SQL 服务器注销后,该行为再次发生。一开始很难排除故障,因为驱动器安装时没有出现任何错误,甚至一开始就可以正常工作。

但我现在确信这与权限有关。任何想法我可能会错过什么?

ssis odbc
  • 1 个回答
  • 864 Views
Martin Hope
pmdci
Asked: 2016-11-25 03:26:56 +0800 CST

在检查字段是否为带有 case 语句的整数时结合 nullif

  • 0

作为 ETL 过程的一部分,我需要将 table1(暂存表)中的 varchar 字段复制到 table2(生产表)中的 tinyint 字段,该字段旨在包含一个整数值。但是,在尝试结合以下两个业务需求时,我遇到了一些问题:

  1. 如果源 varchar 字段的值为空,那么它将在目标 tinyint 字段中设置为 NULL。为此,我通常会使用 NULLIF。

  2. 如果该字段包含无法转换为 tinyint 值的任何内容(例如标点符号、字母或大于 255 的值),则该值将在目标 tinyint 字段中设置为 255。这背后的基本原理是 tinyint 字段永远不会有 255 值,除非有错误——并且将错误设置为 NULL 或 0 是不合适的,因为这些是完全有效的值,我们将无法区分有效输入和错误输入。

我遇到的问题是试图将 NULLIF 与某种 case 语句结合起来。我认为这也许不是正确的做法。对此有什么想法吗?

sql-server azure-sql-database
  • 1 个回答
  • 232 Views
Martin Hope
pmdci
Asked: 2016-11-10 07:27:31 +0800 CST

将包含的 SQL Azure 用户限制为只读访问

  • 0

我正在尝试为 SQL Azure 中的数据库创建一个仅作为只读访问权限的包含用户。我正在做的是:

  1. 使用我的管理员帐户通过 SSMS 连接到数据库。
  2. 右键单击有问题的数据库并选择新查询。

然后我输入了以下内容:

CREATE USER DEMO_dbreader WITH PASSWORD = 'pass@word1'
EXEC sp_addrolemember N'db_datareader', N'DEMO_dbreader'`

之后,我在 SSMS 中断开与数据库的连接,并使用我刚刚创建的新 SQL 帐户重新连接。然后我输入以下内容作为测试:

CREATE table testing123 (id int)

令我惊讶的是,我可以创建表(!?!)我也可以截断它们并删除它们(?!?)不知道这里到底发生了什么。我错过了什么吗?

我需要用户包含在这个数据库中,而不是存在于它之外。

security azure-sql-database
  • 1 个回答
  • 562 Views
Martin Hope
pmdci
Asked: 2016-10-06 11:42:00 +0800 CST

查找月份中星期几的迭代

  • 3

我有一个日期维度表,我需要在其中添加一个新列,我在其中定义了一个月内星期几的迭代(第二个周一/周二/周三/周四/周五/周六/周日等) .

是否可以只对表的日期列进行计算,该列的类型为“日期”?

sql-server t-sql
  • 2 个回答
  • 1321 Views
Martin Hope
pmdci
Asked: 2016-09-22 03:24:55 +0800 CST

将varchar转换为int,将0以下的任何值转换为0

  • 1

我将值从 SQL Azure 中的临时表插入到生产表中。暂存表中的值是 varchar,而生产表中的目标值是 tinyint(它是人类的年龄字段,所以我认为最多 255 就足够了;))

问题是由于源系统中的一个错误,我们倾向于将一些值作为 -1 或 -2 而它们应该是 0。这会导致问题,因为 TINYINT 只支持从 0 到 255 的值(而且事实上这也是错误的)。我想知道是否有某种 case 语句可以用来将值转换为 0,如果它们低于 0,或者如果它们超出 0-255 范围?

sql-server t-sql
  • 2 个回答
  • 1474 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