SSIS使用DateTime输入参数执行SQL查询错误

Mar*_*ark 2 sql-server ssis sql-server-2005

我花了几天时间试图解决这个问题.我有一个SSIS包,在序列容器中有2个执行SQL任务,一个是从表中的简单删除,下一个是插入前删除的简单插入.删除工作正常,所以连接等没问题.

插入失败,出现以下模糊且无用的消息.

failed with the following error: "Syntax error, permission violation, or other nonspecific error". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 
Run Code Online (Sandbox Code Playgroud)

插入有1个输入参数,该参数是绑定到设置为01/01/2011的日期时间变量的日期.当我更换?在具有硬编码日期的sql任务查询中,任务有效.我还在插入任务的预执行事件断点处查看了本地,并且变量没问题.

我还启动了一个SQL事件探查器会话,我看到删除查询命中数据库但没有插入任何内容(当它使用输入参数时).

我正在使用Visual Studio 2005 Pro SP1(不是我的选择)和SQL Server 2005 SP3.

问候

标记

小智 6

我知道你找到了问题的答案.但是,我想在此澄清一下,您使用OleDb连接执行的以下查询是有效的,并且它Execute SQL TaskSSIS包内工作.

INSERT INTO dbo.table1 (DateCol, OtherCol, OtherCol1) 
SELECT ?, SourceCol1, SourceCol2 FROM dbo.SourceTable
Run Code Online (Sandbox Code Playgroud)

以下示例显示使用SSIS 2005(Business Intelligence Development Studio (BIDS) 2005)成功实现上述查询

分步过程:

  1. 创建两个名为dbo.Sourcedbo.Destination使用"脚本" 部分下提供的脚本的表.dbo.Source使用数据填充表格,如屏幕截图#1所示.表dbo.Destination最初为空,将使用执行SQL任务填充源数据.

  2. 在SSIS包上,创建一个名为SQLServer的OLE DB连接,Connections Managers指向您首选的SQL Server实例.参见截图#2.

  3. 在SSIS包上,创建一个名为RecordDate的变量,如屏幕截图#3所示.

  4. 在SSIS包上,放置一个Execute SQL Task如屏幕截图#4所示.配置任务,如屏幕截图#5和#6所示.

  5. 屏幕截图#7显示了示例包执行.

  6. 屏幕截图#8显示了表中dbo.Sourcedbo.Destination包执行后的数据.

希望有所帮助.

脚本: .

CREATE TABLE [dbo].[Destination](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DateValue] [datetime] NOT NULL,
    [ItemNumber] [varchar](50) NOT NULL,
    [Qty] [int] NOT NULL,
CONSTRAINT [PK_Destination] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Source](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [varchar](50) NOT NULL,
    [Qty] [int] NOT NULL,
CONSTRAINT [PK_Source] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

截图#1:

1

截图#2:

2

截图#3:

3

截图#4:

4

截图#5:

五

截图#6:

6

截图#7:

7

截图#8:

8