我有一个应用程序,它使用SQL Server 2008来存储需要从SAP提供大量财务信息的数据(在该公司中使用Oracle 11作为后端).
我要求SAP人员阅读表格,他们说没办法.我让他们直接连接到我的数据库来填充我的表,他们说没办法.(我有来自Oracle数据库的提要,其他应用程序与SAP不同,使用透明网关没有问题,所以这就是为什么问这个)
他们说与SAP交互的唯一方法是使用Web服务.但由于数据量巨大,我认为这不是道路.
有没有人在SAP和SQL Server之间创建接口的经验?
我要扩展我的解释.我当前的应用程序已经由其他三个应用程序(这是一个大型企业)提供,所有应用程序都会转到我收到数据以进一步处理的相同表.所有其他应用程序(1个Oracle,2个SQL Server)执行直接更新或保存数据的存储过程.其他3个应用程序由不同的团队管理,彼此无关.所有人都在开始时抱怨,但最后都接受了将他们的数据导出到这个应用程序.
因此,理想的情况是说服SAP人员这样做:打开与SQL Server的连接并执行一些插入或运行存储过程.
我在几个列和表上运行一批语句,并希望检索有关发生错误的信息.
该语句是类型更改(varchar到nvarchar),当它失败时,它似乎返回2个错误.
消息5074,级别16,状态1,行1对象'DF_XXX_YYY'取决于列'YYY'.
消息4922,级别16,状态9,行1 ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.
但是,当我将它包装在一个TRY/CATCH块中并选择时ERROR_MESSAGE(),它只返回第二个错误:
ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.
理想情况下,我会让它返回第一条消息,因为这提供了更多信息.
确切的SQL语句是:
begin try
alter table XXX
alter column YYY
nvarchar(200)
end try
begin catch
select ERROR_MESSAGE(), ERROR_LINE(), ERROR_NUMBER(), ERROR_PROCEDURE(), ERROR_SEVERITY(), ERROR_STATE()
end catch
Run Code Online (Sandbox Code Playgroud)
有谁知道如何检索更多信息?(@@ERROR也返回第二个错误)
我有一个叫做Cost返回钱的计算列.
我想要另一个返回(Cost * 2)的列,但它不允许我.
我只有一行从sql query(count(*))返回,但在执行包时,它显示上面的错误,包失败.
我将结果类型设置为"单行",并将query(select count(*) as 'result' from abc.tbl_nm)的输出映射到Int32类型的变量.
我试图读取blob消息并在我的一个过程中将其显示为变量,但我收到以下错误:
错误 - ORA-22835:缓冲区对于CLOB到CHAR或BLOB到RAW的转换太小(实际:9923,最大值:2000)
我用google搜索并找到了修改blob消息的建议,如下所示,但宁愿将完整的blob消息显示为字符串.
UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(variable_name,2000,1))
Run Code Online (Sandbox Code Playgroud)
如何显示完整的消息?我可以更改数据库或过程级别的设置吗?
我有一个大约有4亿行的现有表.该表包含一组bit名为IsModified,IsDeleted和IsExpired 的列.
CREATE TABLE [dbo].[ActivityAccumulator](
[ActivityAccumulator_SK] [int] IDENTITY(1,1) NOT NULL,
[ActivityAccumulatorPK1] [int] NULL,
[UserPK1] [int] NULL,
[Data] [varchar](510) NULL,
[CoursePK1] [int] NULL,
[TimeStamp] [datetime] NULL,
[SessionID] [int] NULL,
[Status] [varchar](50) NULL,
[EventType] [varchar](40) NULL,
[DWCreated] [datetime] NULL,
[DWModified] [datetime] NULL,
[IsModified] [bit] NULL,
[DWDeleted] [datetime] NULL,
[IsDeleted] [bit] NULL,
[ActivityAccumulatorKey] [bigint] NULL,
[ContentPK1] [bigint] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我想在表中添加一个默认约束,对于所有将来插入的行,将默认那些位列为0.我试图通过以下命令执行此操作:
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsExpired DEFAULT (0) FOR IsExpired
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsDeleted DEFAULT (0) FOR …Run Code Online (Sandbox Code Playgroud) 我有一个名为的列Lastmodified,数据类型为Date,但应该是DateTime.
是否有任何转换列的方法?
当我使用SQL Server Management Studio的"设计"功能时,我收到以下错误:
不允许保存更改.您所做的更改需要删除并重新创建下表.
我真的不想删除表,我只是想知道是否可以将列转换Date为Datetime或者是否必须删除列并创建具有正确数据类型的新列?
我有一个SSIS项目,其中我定义了一个数据源(提供程序:用于SQL Server的本机OLE DB/Microsoft OLE DB提供程序).当我手动打开它并按下"测试连接"按钮时,一切正常.连接管理器可以使用连接字符串,用户和密码访问数据库.
现在我有一个SSIS包,我根据这个数据源创建了一个连接管理器("来自数据源的新连接......").
在包控制流程中,我有一个SQL任务,它具有连接类型OLE DB,并且在此包中将连接设置为我的连接管理器.该任务向数据库发出一些更新语句,完全没有意义.
现在,当我调试整个事情时,我总是得到同样的错误:
错误:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80040E4D.OLE DB记录可用.来源:"用于SQL Server的Microsoft OLE DB提供程序"Hresult:0x80040E4D描述:"用户'myUser'登录失败."
仅供参考:myUser等于我的数据库用户名.
所以我的问题是:我在这里缺少什么?我真的看不出这里有什么问题.我真的被困在这里了.任何提示非常感谢!
与失败作业对应的日志如下:
04/11/2014 06:40:00,LPR_New,错误,0,USPHND0088,LPR_New,(工作结果),,工作失败.工作由附表14(LPR_New_Job)调用.最后一步是第1步(上传材料).,00:00:00,0,0 ,,,, 0
04/11/2014 06:40:00,LPR_New,错误,1,USPHND0088,LPR_New,上传材料,执行用户:nestle\ussqldbserver.... 00.5324.00 for 32-bit版权所有(C)Microsoft Corp 1984-2005.版权所有.
开始时间:上午6:40:00错误:2014-04-11 06:40:00.39代码:0xC001700A来源:说明:包中的版本号无效.版本号不能大于当前版本号.结束错误错误:2014-04-11 06:40:00.39
代码:0xC0016020源:说明:从版本3到版本2的程序包迁移失败,错误0xC001700A"程序包中的版本号无效.版本号不能更大比当前的版本号." 结束错误错误:2014-04-11 06:40:00.39代码:0xC0010018源:描述:从节点"DTS:Property"加载值"3"时出错.结束错误无法加载包"\ usphnd0088\dataxfer\LPR\LPR New\UploadMaterial.dtsx",因为...处理退出代码5.步骤失败.,00:00:00,0,0 ,,,, 0
我在SSIS数据流组件中使用SQL Server Native Client 10时出现通信链接错误.
错误:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80004005.OLE DB记录可用.来源:"Microsoft SQL Server Native Client 10.0"Hresult:0x80004005说明:"通信链接失败".OLE DB记录可用.来源:"Microsoft SQL Server Native Client 10.0"Hresult:0x80004005说明:"TCP提供程序:指定的网络名称不再可用.
所以我从SQL Server Native Client 10更改为Microsoft OLEDB Provider for SQL Server,希望它能正常运行.这次出现了错误,如下所示:
[Transacn_Tbl1 [737]]错误:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80004005.OLE DB记录可用.来源:"用于SQL Server的Microsoft OLE DB提供程序"Hresult:0x80004005说明:"SQL Server上发生了未指定的错误.连接可能已被服务器终止."
[Transacn_Tbl1 [737]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR."输入"OLE DB目标输入"(750)"失败,因为发生错误代码0xC020907B,并且"输入"OLE DB目标输入"(750)"上的错误行处置指定错误失败.指定组件的指定对象发生错误.在此之前可能会发布错误消息,其中包含有关失败的更多信息.
这两个提供商有什么区别?我应该使用哪一个?