??xml version="1.0" encoding="utf-8" standalone="yes"?>
@tablename sysname
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int
set nocount on
set @objectId=object_id(@tablename)
if @objectId is null -- 判断对象是否存在
begin
print 'The object not exists'
return
end
set @objectname=rtrim(object_name(@objectId))
if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end
if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
begin
print 'The object is not table'
return
end
select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80
if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' ON'
declare syscolumns_cursor cursor
for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid
open syscolumns_cursor
set @column=''
set @columndata=''
fetch next from syscolumns_cursor into @name,@xtype
while @@fetch_status < >-1
begin
if @@fetch_status < >-2
begin
if @xtype not in(189,34,35,99,98) --timestamp不需处理Qimage,text,ntext,sql_variant 暂时不处?br />begin
set @column=@column+case when len(@column)=0 then'' else ','end+@name
set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','
end
+case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char
when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
else @name end
end
end
fetch next from syscolumns_cursor into @name,@xtype
end
close syscolumns_cursor
deallocate syscolumns_cursor
set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename
print '--'+@sql
exec(@sql)
if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' OFF'
GO
使用ҎQ?br />exec UspOutputData 你的表名
选择【执行模式】ؓ“以文本显C结?#8221;Q然后将q行后的l果存成.sqlQ加上用SQL Server生成的数据库脚本可以了?br />另外可以利用W三方工P导出数据可以用powerbuilder。在database painter里面Q用SQL选出Q或者直接打开表,点击生成的list datawindow,然后在菜单file->save rows as->选择SQLQ那么生成的SQL语句包括徏表和insert数据的SQL了?br />
转蝲Q?a >http://blog.sina.com.cn/s/blog_49b531af0100i74v.html
]]>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 用户数据库访问的c?br /> *@作者Administrator
*@createTime 2011-12-5 上午11:55:18
*@version 1.0
*/
public class DButil1 {
private Connection conn;
private Statement st;
private PreparedStatement pps;
private ResultSet rs;
public String url="jdbc:oracle:thin:@localhost:1521:orcl";
private String user="hyl";
private String password="hyl";
//加蝲驱动、放在静态代码块中,保证驱动在整个项目中只加载一ơ,提高效率
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取q接的方?br /> * @return Connection 一个有效的数据库连?br /> */
public Connection getConnection()
{
try {
//注意链接Ӟ要换成自q数据库名Q数据库用户名及密码
Connection con=DriverManager.getConnection(url,user,password);
return con;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 用于执行更新的方?包括Qinsert delete updateQ操?br /> * @param sql String cd的SQL语句
* @return Integer 表示受媄响的行数
*/
public int update(String sql)
{
//定义变量用来判断更新操作是否成功Q如果返?1说明没有影响到更新操作的数据库记录条敎ͼx新操作失?br /> int row=-1;
try {
//如果数据库链接被关闭了,p既得一个新的链?br /> if(conn==null||conn.isClosed()){
conn=getConnection();
}
//使用Connection对象conn的createStatement()创徏StatementQ数据库语句对象Qst
st=conn.createStatement();
//执行更新操作Q返回媄响的记录条数row
row=st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return row;
}
/**
* ZPreparedStatement的修Ҏ?PreparedStatement:表示预编译的 SQL 语句的对?br /> * @param sql String cd的SQL语句Qinsert delete updateQ?br /> * @param obj 存放动态参数的数组
* @return Integer 表示受媄响的行数
*/
public int update(String sql,Object ...obj)
{
try {
//获取链接
if(conn==null||conn.isClosed()){
conn=getConnection();
}
//创徏预编译的 SQL 语句对象
pps=conn.prepareStatement(sql);
//定义变量length代表数组长度Q也是预处理的sql语句中的参数个数
int length=0;
//ParameterMetaDataQ用于获取关?PreparedStatement 对象中每个参数的cd和属性信息的对象
ParameterMetaData pmd=pps.getParameterMetaData();
length=pmd.getParameterCount();
//循环sql语句中的?讄为obj数组中对应的|注意?开始,所以i要加1
for(int i=0;i<length;i++)
{
pps.setObject(i+1, obj[i]);
}
//执行更新操作
return pps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
return -1;
}
/**
* 获取一条记录的ҎQ要依赖于下面的queryToListҎQ注意泛型的使用
* @param sql
* @return Map<String,Object>
*/
public Map<String,Object> getOneRow(String sql)
{
//执行下面的queryToListҎ
List<Map<String,Object>> list=queryToList(sql);
//三目q算Q查询结果list不ؓI回list中第一个对?否则q回null
return list.size()>0?list.get(0):null;
}
/**
* q回查询l果列表QŞ如:[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}...]
* @param sql
* @return List<Map<String,Object>>
*/
public List<Map<String,Object>> queryToList(String sql)
{
//创徏集合列表用以保存所有查询到的记?br /> List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
try {
if(conn==null||conn.isClosed()){
conn=getConnection();
}
st=conn.createStatement();
rs=st.executeQuery(sql);
//ResultSetMetaData 是结果集元数据,可获取关?ResultSet 对象中列的类型和属性信息的对象 例如Q结果集中共包括多少列,每列的名U和cd{信?br /> ResultSetMetaData rsmd=rs.getMetaData();
//获取l果集中的列?br /> int columncount=rsmd.getColumnCount();
//while条g成立表明l果集中存在数据
while(rs.next())
{
//创徏一个HashMap用于存储一条数?br /> HashMap<String, Object> onerow=new HashMap<String, Object>();
//循环获取l果集中的列名及列名所对应的|每次循环都得C个对象,形如Q{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
for(int i=0;i<columncount;i++)
{
//获取指定列的名称Q注意orcle中列名的大小?br /> String columnName=rsmd.getColumnName(i+1);
onerow.put(columnName, rs.getObject(i+1));
}
//获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}攑ֈ集合列表?br /> list.add(onerow);
}
}catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return list;
}
/**
* q回查询l果列表,使用的是预编lSQL 语句对象PreparedStatement
* 形如Q[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}]
* @param sql
* @param paramValues
* @return List<Map<String,Object>>
*/
public List<Map<String,Object>> queryWithParam(String sql,Object ...paramValues){
//创徏集合列表用以保存所有查询到的记?br /> List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
try {
if(conn==null||conn.isClosed()){
conn=getConnection();
}
pps = conn.prepareStatement(sql);
for (int i = 0; i < paramValues.length; i++) {
pps.setObject(i + 1, paramValues[i]);
}
rs = pps.executeQuery();
//ResultSetMetaData 是结果集元数据,可获取关?ResultSet 对象中列的类型和属性信息的对象 例如Q结果集中共包括多少列,每列的名U和cd{信?br /> ResultSetMetaData rsmd=rs.getMetaData();
//获取l果集中的列?br /> int columncount=rsmd.getColumnCount();
//while条g成立表明l果集中存在数据
while (rs.next()) {
//创徏一个HashMap用于存储一条数?br /> HashMap<String, Object> onerow=new HashMap<String, Object>();
//循环获取l果集中的列名及列名所对应的|每次循环都得C个对象,形如Q{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
for(int i=0;i<columncount;i++)
{
//获取指定列的名称Q注意orcle中列名的大小?br /> String columnName=rsmd.getColumnName(i+1);
onerow.put(columnName, rs.getObject(i+1));
}
//获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}攑ֈ集合列表?br /> list.add(onerow);
}
}catch (SQLException e) {
e.printStackTrace();
}
finally{
close();
}
return list;
}
/**
* 实现oracle分页功能
* @param sql
* @param pagesize
* @param pagenow
* @return PageBean
*/
public PageBean getPage(String sql,int pagesize,int pagenow)
{
PageBean pb=new PageBean();
int end=pagenow*pagesize;
int start=end-pagesize+1;
String exesql="select a.* from (select t.*,rownum as rowindex from ("+sql+") t where rownum<="+end+" ) a where a.rowindex>="+start;
String countsql="select count(*) as rowcount from ("+sql+")";
pb.setResult(queryToList(exesql));
pb.setPagenow(pagenow);
pb.setPagesize(pagesize);
Map<String,Object> map=this.getOneRow(countsql);
int rows=Integer.parseInt(map.get("ROWCOUNT").toString());
pb.setRows(rows);
int pages=rows%pagesize==0?rows/pagesize:rows/pagesize+1;
pb.setPages(pages);
pb.setSql(sql);
return pb;
}
/**
* 关闭数据库各U资源Connection Statement PreparedStatement ResultSet的方?br /> */
private void close()
{
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null)
{
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pps!=null){
try {
pps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
if(conn!=null&&!conn.isClosed())
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}