我对SSIS比较陌生.我正在尝试使用Microsoft OLEDB for Oracle从Oracle数据库中提取信息,我正在使用此查询:
SELECT ID FROM Test
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:the value cannot be converted because of a potential loss of data
.如果我将查询更改为以下,则它可以正常工作:
SELECT '1' FROM Test
Run Code Online (Sandbox Code Playgroud)
我认为它失败了,因为ID不是整数.但是,平面文件连接管理器显示OutputColumnWidth是50.我做错了什么?
格林尼治标准时间16:30更新
我已经对此进行了更多调查,看起来是列有"频率"或"无"的直方图导致问题的列.直方图"高度平衡"的那些似乎没问题.
有人想要解释一下这个问题的机制...这个查询解析器的小怪癖几乎对我造成了重大损害.
创建一个包含100行的测试表,其中包含1-100.
create table test( JobID int primary key);
;with numbers as (
select 1 as n
union all
select n + 1 as n
from numbers
where n < 100
)
insert into test
select n from numbers
Run Code Online (Sandbox Code Playgroud)
创建一个包含整数1-50的临时表:
select jobid as number into #deletions
from test
where jobid <= 50
Run Code Online (Sandbox Code Playgroud)
现在使用IN
子句进行删除,但内部查询中的列名错误:
delete from test where JobID in (select JobID from #deletions)
Run Code Online (Sandbox Code Playgroud)
从外观上看,最后一个删除语句给出了删除50行的外观......但是,没有JobID
输入#deletions
,所以它从外部查询中拉出来并最终以某种方式删除测试中的所有行.
我的问题是,它究竟是如何解释内部查询... #deletions
只有50行,那么如何从外表中提取所有100个id?这种类型的错字/错误几乎对我今天造成了重大损害.
在我看来,这应该抛出某种解析/语法错误或某种歧义错误.
这是一个 SQL Fiddle Demo
我有一个数组,
array = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
需要将其转换为:
newArray = [{id: 1}, {id: 2}, {id: 3}]
Run Code Online (Sandbox Code Playgroud)
我知道这一点,有什么有效的方法吗?
array.each { |id| newArray << { id: id } }
Run Code Online (Sandbox Code Playgroud) 所以我用Google搜索它因为使用不安全的代码而冻结,并且AbortException
仅在控制流返回托管代码时抛出.所以,在我的情况下,我有一个本机库,在一个线程中调用.所以有时我不能中止它,因为库是本机的,Abort
方法不仅不做任何事,而是冻结调用线程.
所以,我想解决它.
例如,使用不同的过程应该有所帮助,但它非常复杂.
因此,一个不太重的解决方案是使用'AppDomains'.但无论如何我应该创建一个exe并调用它.我试着像这样在内存中生成它
var appDomain = AppDomain.CreateDomain("newDomain");
var assemblyBuilder = appDomain.DefineDynamicAssembly(new AssemblyName("myAsm"), AssemblyBuilderAccess.RunAndCollect);
var module = assemblyBuilder.DefineDynamicModule("myDynamicModule");
var type = module.DefineType("myStaticBulder", TypeAttributes.Public);
var methBuilder = type.DefineMethod("exec", MethodAttributes.Static | MethodAttributes.Public);
var ilGenerator = methBuilder.GetILGenerator();
Run Code Online (Sandbox Code Playgroud)
但我发现只有EMIT方式,它非常复杂.
是否存在肤浅的解决方案?