今日想做一个这样的程序,程序实现通过一段ORACLE数据库的SELECT 语句,在SQLSERVER上建立一张表,表结构和select语句查询的结果一样,比如ORACLE数据库里面有这样一段语句:select rec_no,time_start,time_end,is_end,article_id from l3_rmlbd.article,我希望通过C#程序能够自动在sqlserver上建立一张表,包含rec_no,time_start,time_end,is_end,article_id 5个字段,字段类型和大小和ORACLE上的l3_rmlbd.article表一样。有没有什么好方法,希望大家赐教!不胜感激。
14 个解决方案
#1
无非就是读取Oracle的表结构,然后再产生对应的建表SQL,再执行。
#2
读取表结构,在根据表结构在去创建,一切都通过sql可以执行
#3
虽然不是太明白 楼主借鉴二楼吧 对于新手来说 多百度 少谷歌
#4
肯定可以的.在程序里用sql语句可以建表..什么要求都能完成..
#5
字段类型和大小 和约束什么之类的.都有...很简单的..去学下t-sql语句..想怎么建就怎么建.
#6
Create table 表名(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
…… ,
姓名 varchar(50) not null, //非空
身份证 char(18) unique, //唯一
年龄 int check (年龄>=18 and年龄<=55) //要求员工的年龄必须是在18到55岁之间。
int char之类的是数据类型
年龄 身份证之类的是字段名.
Create table 是建表命令..
Create table 表1{内容} 这样就建了一个表1
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
…… ,
姓名 varchar(50) not null, //非空
身份证 char(18) unique, //唯一
年龄 int check (年龄>=18 and年龄<=55) //要求员工的年龄必须是在18到55岁之间。
int char之类的是数据类型
年龄 身份证之类的是字段名.
Create table 是建表命令..
Create table 表1{内容} 这样就建了一个表1
#7
感谢楼上几位,可能是我表达的不够明白。
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?
#8
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
select * from sourcetable into targettable where 0=1
#9
+1
#10
DbCodeDOM
#11
你好,如果在sql server里没有sourcetable 这张表呢?就像我在7楼说的,我现在有2个数据库,分别是oracle和sql server的,现在已经用.net 写了个实时表同步功能,该功能要求只要提供远程数据库链接和本地数据库链接、远程表名,程序中会检测本地表是否存在,不存在则进行查询远程表结构然后动态生成sql 的创建表命令。创建后,进行第一次的SqlBulkCopy快速复制,过后间隔根据配置文件的作业系统进行定时同步两表数据。目前我的困难就是“不存在则进行查询远程表结构然后动态生成sql 的创建表命令”没找到好方法,其他的功能都完成了。
如果有知道的大侠,望不吝赐教!
#12
异构数据库,就只能字段对应了。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。
#13
恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!
#14
楼主可否分享下最后是怎么实现的?最近也遇到同样的问题
#1
无非就是读取Oracle的表结构,然后再产生对应的建表SQL,再执行。
#2
读取表结构,在根据表结构在去创建,一切都通过sql可以执行
#3
虽然不是太明白 楼主借鉴二楼吧 对于新手来说 多百度 少谷歌
#4
肯定可以的.在程序里用sql语句可以建表..什么要求都能完成..
#5
字段类型和大小 和约束什么之类的.都有...很简单的..去学下t-sql语句..想怎么建就怎么建.
#6
Create table 表名(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
…… ,
姓名 varchar(50) not null, //非空
身份证 char(18) unique, //唯一
年龄 int check (年龄>=18 and年龄<=55) //要求员工的年龄必须是在18到55岁之间。
int char之类的是数据类型
年龄 身份证之类的是字段名.
Create table 是建表命令..
Create table 表1{内容} 这样就建了一个表1
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
…… ,
姓名 varchar(50) not null, //非空
身份证 char(18) unique, //唯一
年龄 int check (年龄>=18 and年龄<=55) //要求员工的年龄必须是在18到55岁之间。
int char之类的是数据类型
年龄 身份证之类的是字段名.
Create table 是建表命令..
Create table 表1{内容} 这样就建了一个表1
#7
感谢楼上几位,可能是我表达的不够明白。
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?
如果在程序里面定义好创建好建表的sql语句,然后cmd.ExecuteNonQuery(),这个当然可以,但是我想是通过dataAdapter.Fill方法,将查询语句的结果填充到一实例化的DataTable中,让后用程序读取这个datatable中字段名,字段类型,字段大小等,自动生成create table的sql语句,让后执行cmd.ExecuteNonQuery(),不需要事先写好建表的SQL语句,用什么方法可以达到呢?
#8
Oracle不清楚。不过在SQL Server里的select into可以利用一张既有的表,创建一张只有表结构的空表,大致象这样
select * from sourcetable into targettable where 0=1
#9
+1
#10
DbCodeDOM
#11
你好,如果在sql server里没有sourcetable 这张表呢?就像我在7楼说的,我现在有2个数据库,分别是oracle和sql server的,现在已经用.net 写了个实时表同步功能,该功能要求只要提供远程数据库链接和本地数据库链接、远程表名,程序中会检测本地表是否存在,不存在则进行查询远程表结构然后动态生成sql 的创建表命令。创建后,进行第一次的SqlBulkCopy快速复制,过后间隔根据配置文件的作业系统进行定时同步两表数据。目前我的困难就是“不存在则进行查询远程表结构然后动态生成sql 的创建表命令”没找到好方法,其他的功能都完成了。
如果有知道的大侠,望不吝赐教!
#12
异构数据库,就只能字段对应了。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。
在Oracle找到各个字段的数据类型和字段大小,在你取回数据的时候,
在dataset里是有这些字段的类型和大小的。
在sqlserver里自己创建吧。
#13
恩,参照各位的意见,我写了个方法,已经可以用了,谢谢大家!
#14
楼主可否分享下最后是怎么实现的?最近也遇到同样的问题