2004年10月19日

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 只返回两张表连接列的匹配项

2004年09月30日

(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)。

2004年09月28日

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>

2004年09月27日

数据类型映射

SQL Server ODBC驱动程序提供了一整套内容丰富的数据类型映射关系。

Microsoft SQL Server数据类型 ODBC SQL数据类型

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数据类型映射关系如下表所示。

Informix数据类型 ODBC SQL数据类型

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

2004年09月24日

在 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