如何分辨出sql server数据库中的自动增量字段(100分)

  • 主题发起人 主题发起人 liuzhw
  • 开始时间 开始时间
L

liuzhw

Unregistered / Unconfirmed
GUEST, unregistred user!
在sql server中的自动增量字段,其属性是整型,但设置为自动加一,这相当
于ftautoinc字段类型,但在程序中显示的仅仅是ftinteger类型。请问各位大
虾如何区分这个字段?
 
应该可以在Master数据库中查到所有Table的定义,待我研究研究, :)
 
如果要知道那一个表有IDENTITY,可以用SQL语句,SP_HELP TableName会显示出来.
在程序中怎么知道有意义吗?既然要操作这个表,肯定要知道表的结构.
 
//这倒也是, :)
 
to wgzhang:你能说得详细点吗?
 
Enterpricemanager中可以看到
1.直接用SQL语句,再写一遍,sp_help 加上你想知道表的名字.
2.右键单击表名,可以看到表的结构.
 
可我想在delphi中分辨出那个字段是类似与ftautoinc那样的字段类型。
 
那你只能用oracle了.
 
一个歪招:

isAutoInc:=False;
with Table1 do
begin
try
edit;
oldvalue:=fieldbyname(fieldtotest).asinteger;
fieldbyname(fieldtotest).asinteger:='1234';
post;
edit;
fieldbyname(fieldtotest).asinteger:=oldvalue;
post;
except
isAutoInc:=True;
end;
end;

因为AutoInc字段不允许修改。
 
告知一个信息
王寒松在一个新编的工具中解决了此问题,可以向他讨教.
 
SQL Server的话,可执行SQL如下:
select status from syscolumns where id=Object_ID("表名")
and name="字段名"

结果为128,即为IDENTITY型的字段。

Good Luck!
 
喘口气,到这里转转.

下面这段代码可以用,
你可以用 findtype(table1.fields[0]) 做测试 ,在我这里工作的好好的。that's all.

Function TFrmMain.FindType(aField: TField): string;
begin
case aField.DataType of
ftString: Result := 'String';
ftAutoInc: Result := 'Auto-inc 32-bit integer';
//自动增长域 for My MsSql Server , it's identity fields
ftInteger: Result := '32-bit integer';
ftWord: Result := '16-bit unsigned integer';
ftSmallint: Result := '16-bit integer';
ftBoolean: Result := 'Boolean';
ftFloat: Result := 'Float';
ftCurrency: Result := 'Money';
ftGraphic: Result := 'Bitmap';
ftFmtMemo: Result := 'Formatted text memo';
ftParadoxOle: Result := 'Paradox OLE';
ftDBaseOle: Result := 'dBASE OLE';
ftTypedBinary: Result := 'Typed binary';
ftBCD: Result := 'BCD';
ftDate: Result := 'Date';
ftTime: Result := 'Time';
ftDateTime: Result := 'DateTime';
ftBytes: Result := 'Fixed bytes (binary)';
ftVarBytes: Result := 'Variable bytes (binary)';
ftBlob: Result := 'BLOB';
ftMemo: Result := 'Text memo';
else
Result := '未知';
end;
end;
 
Identity 字段最好是不要用, 我在省纺做程序的时候被Identity 字段搞得很惨,
这种类型的字段只是何在为数不多的场合与别的字段联合起来唯一标识某一条记录,
并且不适宜作外键
 
uandme, me 2, the damn Identity field.....:(
 
谢谢各位!
 
后退
顶部