alter table ts_userinfo
drop constraint FK_TS_USERI_REFERENCE_TS_GOVER
go
if exists (select 1
from sysobjects
where id = object_id(‘ts_bulletin’)
and type = ‘U’)
drop table ts_bulletin;
alter table ts_government
add constraint FK_TS_GOVER_REFERENCE_TS_UNITG foreign key (ug_id)
references ts_unitgroup (ug_id)
on delete cascade;
if exists (select 1
from sysobjects
where id = object_id(‘Trigger_1′)
and type = ‘TR’)
drop trigger Trigger_1
go
create trigger trig_del on ts_government
for delete
as
begin transaction
delete from ts_userinfo where ui_id in(
select ui_id from ts_underunit where g_id in(
select g_id from deleted))
delete from ts_underunit where g_id in(select g_id from deleted)
commit transaction
cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数
left join 第一张表的连接列在第二张表中没有匹配时,第二张表中的值返回null
right join 第二张表的连接列在第一张表中没有匹配时,第一张表中的值返回null
full join 返回两张表中的行 left join+right join
inner join 只返回两张表连接列的匹配项
(1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
后面三种数据类型和前面的相比,从名称上看只是多了个字母”n”,它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
(2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
(3)bitint、int、smallint、tinyint和bit
bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint:从0到255的整数数据。
bit:1或0的整数数据。
(4)decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
(5)float和real
float:从-1.79^308到1.79^308之间的浮点数字数据。
real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
1. 先确定JDK和Tomcat都能正常运行。(Tomcat4.1.30比较好使)
a.设置CLASSPATH环境变量:(假设JDK安装在C:\jdk)C:\jdk\bin;.;C:\jdk\lib;C:\jdk\lib\dt.jar;C:\jdk\lib\tools.jar
b.设置PATH环境变量:C:\jdk;.;C:\jdk\bin
c.然后修改环境变量中的CLASSPATH,把Tomat安装目录下的?? common\lib下的? servlet.jar追加到CLASSPATH中去
2.下载microsoft sql server 2000 driver for jdbc,安装(比如安装目录是C:\JDBC。)
然后必须将安装目录中的lib目录下三个jar文件:
?msbase.jar,?mssqlserver.jar,?msutil.jar拷贝到Tomcat目录下common\lib目录下,之后,
修改环境变量中的CLASSPATH,把SQL?Server?2000?For?JDBC?驱动程序安装目录下的
C:\JDBC\lib\msbase.jar;
C:\JDBC\lib\mssqlserver.jar;
C:\JDBC\lib\msutil.jar
追加到CLASSPATH中去,
3.测试用例:
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
3.测试用例:
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
数据类型映射
SQL Server ODBC驱动程序提供了一整套内容丰富的数据类型映射关系。
|
binary
|
SQL_BINARY
|
|
bit
|
SQL_BIT
|
|
char, character
|
SQL_CHAR
|
|
datetime
|
SQL_TIMESTAMP
|
|
decimal, dec
|
SQL_DECIMAL
|
|
float, double precision, float(n) for n = 8-15
|
SQL_FLOAT
|
|
image
|
SQL_LONGVARBINARY
|
|
int, integer
|
SQL_INTEGER
|
|
money
|
SQL_DECIMAL
|
|
nchar
|
SQL_WCHAR
|
|
ntext
|
SQL_WLONGVARCHAR
|
|
numeric
|
SQL_NUMERIC
|
|
nvarchar
|
SQL_WVARCHAR
|
|
real, float(n) for n = 1-7
|
SQL_REAL
|
|
smalldatetime
|
SQL_TIMESTAMP
|
|
smallint
|
SQL_SMALLINT
|
|
smallmoney
|
SQL_DECIMAL
|
|
sysname
|
SQL_VARCHAR
|
|
text
|
SQL_LONGVARCHAR
|
|
timestamp
|
SQL_BINARY
|
|
tinyint
|
SQL_TINYINT
|
|
uniqueidentifier
|
SQL_GUID
|
|
varbinary
|
SQL_VARBINARY
|
|
varchar
|
SQL_VARCHAR
|
timestamp数据类型将被转换成SQL_BINARY数据类型。这主要是因为,timestamp列内数值并非datetime数据,但更接近于binary(8)数据。它们可供用来指示发生在数据行上的SQL Server操作时序。
针对Intersolv Data Direct ODBC(伴随Informix客户端SDK一并发售)的Informix数据类型映射关系如下表所示。
|
BYTE
|
SQL_LONGVARBINARY
|
|
CHAR
|
SQL_CHAR
|
|
DATE
|
SQL_TIMESTAMP
|
|
DATETIME YEAR TO FRACTION(F)
|
SQL_TYPE_TIMESTAMP
|
|
DATETIME YEAR TO DAY
|
SQL_TYPE_DATE
|
|
DATETIME HOUR TO SECOND
|
SQL_TYPE_TIME
|
|
DECIMAL
|
SQL_DECIMAL
|
|
FLOAT
|
SQL_DOUBLE
|
|
INTERVAL YEAR(P) TO YEAR
|
SQL_INTERVAL_YEAR
|
|
INTERVAL YEAR(P) TO MONTH
|
SQL_INTERVAL_YEAR_TO_MONTH
|
|
INTERVAL MONTH(P) TO MONTH
|
SQL_INTERVAL_MONTH
|
|
INTERVAL DAY(P) TO DAY
|
SQL_INTERVAL_DAY
|
|
INTERVAL DAY(P) TO HOUR
|
SQL_INTERVAL_DAY_TO_HOUR
|
|
INTERVAL DAY(P) TO MINUTE
|
SQL_INTERVAL_DAY_TO_MINUTE
|
|
INTERVAL DAY(P) TO SECOND
|
SQL_INTERVAL_DAY_TO_SECOND
|
|
INTERVAL DAY(P) TO FRACTION(F)
|
SQL_INTERVAL_DAY_TO_SECOND
|
|
INTERVAL HOUR(P) TO HOUR
|
SQL_INTERVAL_HOUR
|
|
INTERVAL HOUR(P) TO MINUTE
|
SQL_INTERVAL_HOUR_TO_MINUTE
|
|
INTERVAL HOUR(P) TO SECOND
|
SQL_INTERVAL_HOUR_TO_SECOND
|
|
INTERVAL HOUR(P) TO FRACTION(F)
|
SQL_INTERVAL_HOUR_TO_SECOND
|
|
INTERVAL MINUTE(P) TO MINUTE
|
SQL_INTERVAL_MINUTE
|
|
INTERVAL MINUTE(P) TO SECOND
|
SQL_INTERVAL_MINUTE_TO_SECOND
|
|
INTERVAL MINUTE(P) TO FRACTION(F)
|
SQL_INTERVAL_MINUTE_TO_SECOND
|
|
INTERVAL SECOND(P) TO SECOND
|
SQL_INTERVAL_SECOND
|
|
INTERVAL SECOND(P) TO FRACTION(F)
|
SQL_INTERVAL_SECOND
|
|
INTERVAL FRACTION TO FRACTION(F)
|
SQL_VARCHAR
|
|
MONEY
|
SQL_DECIMAL
|
|
SERIAL
|
SQL_INTEGER
|
|
SMALLFLOAT
|
SQL_REAL
|
|
SMALLINT
|
SQL_SMALLINT
|
|
TEXT
|
SQL_LONGVARCHAR
|
|
VARCHAR
|
SQL_VARCHAR
|
在 Microsoft.com 中搜索:”将Informix数据库迁移至Microsoft SQL Server 2000″
http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/infmxsql.mspx
借助数据转换服务实现的数据迁移
在Informix与SQL Server之间最简单的迁移方法就是利用Microsoft SQL Server 2000提供的数据转换服务(DTS)特性。DTS向导将指引您依次完成以SQL Server为目标的数据迁移过程。
Informix的ODBC驱动程序并不支持与DTS配合使用。Merant Informix OLE DB提供程序虽可支持从Informix的DTS导入,但却不支持向Informix的DTS导出。这个驱动程序还无法用于元数据导出。Intersolv Informix ODBC驱动程序虽可获得支持,但将受到以下限制:
| ? |
BLOBs无法被导出至Informix。
|
| ? |
在Informix上新建数据表时,DTS导入/导出向导无法正确地将SQL Server 2000日期时间数据列映射至Informix的“Datetime year to fraction”数据类型。为此,只能采取手工方式将这种数据类型转换成Informix日期类型。
|
| ? |
DTS元数据导入功能将不会导入Informix目录或表信息。
|
bigint 8
binary 50
bit 1
char 10
datatime 8
decimal 9
float 8
image 16
int? 4
money? 8
nchar 10
ntext 16
numeric 9
nvarchar? 50
real 4
smalldatatime 4
smallint 2
smallmoney? 4
sql_variant
text 16
timestamp 8
tinyint 1
uniqueidentifier? 16
varbinary 50
varchar 50