MS SQL Server 的 uniqueidentifier 字段如何赋值(用INSERT语句)(内空)(30分)

  • 主题发起人 主题发起人 Heado
  • 开始时间 开始时间
insert into tablename([Fields]) values([values])

Fields中不要有uniqueidentifier字段
 
uniqueidentifier是字段类型,因为要此字段在全表中作为纪录的唯一标识,
我的意思是让此字段像Access中的自增字段.(自动赋值)如何实现?
谢谢
 
识别,识别种子。
insert时候不要理财这个字段。
 
用SQL Server的识别种子,即将列的类型定义为identity,插入数据时别理它就可以了
 
不理会会出错.
我将字段类型改为numric,然后选中Identify后此问题可解决.但是,我还是没有弄明白
uniqueidentifier型字段如何用,在什么情况下用.

另:
我在MS SQL Server 中定义一个datatime字段,然后用Insert给此字段赋值(在ASP中),如下面:

Response.write FormatDataTime(data(),2)
SQL="Insert tablename Set datatimefield='" & FormatDataTime(data(),2)
conn.Execute(SQL)

此时显示 00-8-13 表明取出日期没有问题,但执行Insert后数据库中
此字段的值为 1899-12-10

不知为何?

 
uniqueidentifier 是MS SQL Server新定义的数据类型,数据长度为16Bytes,存储的内容为GUID,
即全球唯一标志。其格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,x是16进制符号0-9,A-F。
如果通过Delphi建立一个ActiveXForm单元,在ActiveXForm1_TLB.pas源程序中您可以看到如下的
具体示例:

const
LIBID_ActiveFormProj1: TGUID = '{4E108540-7315-11D4-9413-0054AB30EEE4}';

IID_IActiveFormX: TGUID = '{4E108541-7315-11D4-9413-0054AB30EEE4}';
DIID_IActiveFormXEvents: TGUID = '{4E108543-7315-11D4-9413-0054AB30EEE4}';
CLASS_ActiveFormX: TGUID = '{4E108545-7315-11D4-9413-0054AB30EEE4}';

Delphi的TGUID类型就是 SQL Server 的 uniqueidentifier 类型。

CREATE TABLE T1 ( UID uniqueidentifier)

向T1插入 uniqueidentifier 可以有以下几种方法:
1. 通过NewID()函数,新建一个uniqueidentifier值
INSERT TABLE T1 VALUES ( NewID() )

2. 以字符串的形式表达,可以插入你想要的uniqueidentifier值
INSERT TABLE T1 VALUES ( '{036AF060-437D-11D4-8A28-CC17CC170655}' )
INSERT TABLE T1 VALUES ( '036AF060-437D-11D4-8A28-CC17CC170655' )
两种方式都可以。

另外请注意uniqueidentifier和identity类型的区别:
uniqueidentifier操作上和其它的integer,datetime 等类型一样,定义表时可以设定该字段的NULL属性,
如果没有定义唯一索引或UNIQUE属性,可以插入重复的记录值。
identity 则是自动递增类型,其基类型必须是整数类型,如integer、tinyint、smallint等,该字段是
不允许为NULL的。如果没有设置 IDENTITY_INSERT 为 ON 的话,是不允许直接插入新记录的。
 
uniqueidentifier字段是SQL Server7.0在做数据复制时,自动加上去的。

带有uniqueidentifier字段的表在Explore中打不开,在delphi中也不能打开,哪位大虾可
以提供解决办法?
 
小弟还有一个问题,望各位大虾不赐吝教:
我在SQL Server中表中建一datetime字段,然后用ASP程序给该字段赋值,语句如下:

SQLStr="Insert tablename Set field='" & date()
Response.Write date()
conn.Execute(SQLStr)

执行后输出正确为 00-8-13
但是写到数据库中以后,其变成了 1899-12-10

我用的是MS SQL Server 7.0 + NT4.0 + NTSP5 + IIS4.0
 
可能是这样:
SQLStr=="Insert tablename Set field=" & date()
执行后:
SQLStr="<font color=#ff0000>Insert tablename Set field=00-8-13</font>"

<font color=#0000ff>when setting a datetime or smalldatetime value, the date defaults to January 1, 1900.
摘自SQL Server Books OnLine</font>

1899-12-10恰好等于1900/1/1减去8天再减去13天
 
多人接受答案了。
 
后退
顶部