Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS使用DateTime输入参数执行SQL查询错误_Sql Server_Sql Server 2005_Ssis - Fatal编程技术网

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

Sql server SSIS使用DateTime输入参数执行SQL查询错误,sql-server,sql-server-2005,ssis,Sql Server,Sql Server 2005,Ssis,我花了几天时间试图解决这个问题。我有一个SSIS包,在一个序列容器中有两个执行SQL任务,一个是从表中简单删除,另一个是简单插入。删除在插入之前。删除工作正常,因此连接等正常 插入失败,出现以下模糊且没有帮助的消息 failed with the following error: "Syntax error, permission violation, or other nonspecific error". Possible failure reasons: Problems with the

我花了几天时间试图解决这个问题。我有一个SSIS包,在一个序列容器中有两个执行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. 
insert有1个输入参数,该参数是绑定到设置为01/01/2011的datetime变量的日期。我什么时候更换?在具有硬编码日期的sql任务查询中,该任务工作。我还研究了insert任务上预执行事件断点处的局部变量,变量是ok的

我还启动了一个SQL Profiler会话,我看到delete查询命中DB,但insert没有命中(当它使用输入参数时)

我使用的是VisualStudio2005Pro SP1(不是我的选择)和SQLServer2005SP3

问候


标记

您需要确保SQL语句的类型正确,以便根据您的连接管理器进行参数化

如果您使用的是OLE DB,那么Insert语句需要类似于
Insert INTO Tbl(col)值(?)

Resultset应该是“None”(因为插入时没有返回任何内容),Parameter Mapping选项卡应该有一个单独的参数(或者尽可能多的参数),并且参数名(对于OLE DB)应该从0开始,然后是1,2…,n。如果使用ADO连接,则必须将参数命名为Param1,Param2,…ParamN

您可以在此处看到将变量传递给各个连接管理器的参考:

根据您的评论正确回答: 您不能在此类查询中使用参数映射,但有一种简单的方法

创建一个新的变量sqlCommand(类型字符串)。在变量列表中单击它,然后按F4键查看属性。将“EvaluateExpression”更改为true,然后单击表达式框以打开表达式窗口。在这里,以如下格式进行查询:“INSERT INTO tbl(dateCol,intCol,charCol)选择CONVERT(DATETIME),”+(DT_STR,201252)@[User::dateVar]+“,104)作为另一个tbl的dateCol、intCol、charCol”

当您单击“计算表达式”时,您将看到一个有效的SQL语句正在形成,您可以使用它

现在返回执行SQL任务,删除参数映射。关闭对话框,单击执行SQL任务,按F4键,找到表达式行,单击…并在属性“SqlStatementSource”上添加一个表达式,表达式@[User::sqlCommand](或任何您命名的变量)


现在运行任务,它应该可以正常工作。

您可以在这里找到表达式:

我知道您已经找到了问题的答案。但是,我想在这里澄清一下,您使用OleDb连接执行的以下查询是有效的,并且它在
SSIS
包中的
Execute SQL Task
中起作用

INSERT INTO dbo.table1 (DateCol, OtherCol, OtherCol1) 
SELECT ?, SourceCol1, SourceCol2 FROM dbo.SourceTable
以下示例显示了使用SSIS 2005成功实现上述查询的过程(
BusinessIntelligenceDevelopmentStudio(BIDS)2005

逐步过程:

  • 使用脚本部分提供的脚本创建两个名为
    dbo.Source
    dbo.Destination
    的表。使用屏幕截图所示的数据填充表
    dbo.Source
    。表
    dbo.Destination
    最初将为空,并将填充源代码使用执行SQL任务的数据

  • 在SSIS包上,在
    连接管理器中创建名为SQLServer的OLE DB连接,指向您首选的SQL Server实例。请参阅屏幕截图2

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

  • 在SSIS包上,放置一个
    执行SQL任务
    ,如屏幕截图#4所示。配置任务,如屏幕截图#5和#6所示

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

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

  • 希望有帮助

    脚本:

    屏幕截图#1:

    截图#2:

    屏幕截图#3:

    屏幕截图#4:

    屏幕截图#5:

    屏幕截图#6:

    截图#7:

    截图#8:


    SQL连接是OLE DB、ODBC还是其他什么?我使用的是OLE DB我的查询的形式是INSERT INTO Table1(DateCol、OtherCol、OtherCol1…)选择?、SourceCol1、SourceCol2….从sourceTable ResultSet为none且参数映射有一个项User::RecordDate、Input、DATE、0Thanks cairnz,当我将EvaluateExpression设置为true时,单击表达式不会发生任何情况,也没有表达式窗口。我正在使用Visual Studio 2005 SP1,因此重新访问并重新阅读了投票结果。是的,您是的,你可以这样做,但是我不推荐这样做,因为它隐藏了当你的项目留给其他人时很难找到的逻辑。通过在表达式中使用sql语句,你可以对其进行计算,sql任务清楚地说明这是一个动态sql。在其中的某个地方找到一个?会使事情变得混乱,imho。
    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