我是SQL Server的新手,(在1980年代后期确实学习过SQL,如果我还记得那就是DB2)今天我将我的数据库层集成到SQL中,首先是SQL Server。
首先。正如我今天所做的那样,我将在运行时以编程方式生成每个数据库对象,表对象和索引,就像我对项目中的几乎所有视觉和数据对象一样。也就是说,我使用的视觉设计工具非常有限。
我项目中的每一列都有一个外部描述文件(每个用户都有包含这些文件的配置文件),就像我使用数据库键和视觉对象一样,效果如定位,长度,图片蒙版,字体大小,等动态形式。几乎每个窗口,网格,过滤器都是在运行时创建的,就像我的大多数数据库连接一样。
我确实构建了一个小测试“机器”来在这个环境中创建表并且做得很好,很容易在程序中创建表(我使用delphi和ADO)
我遇到的问题是当我在SQL Server中将列标记为“自动增量”或Identity
时,或者如果我将列描述为主键,则SQL Server Management Studio会自动创建索引或键。
如果我可以管理它给这个索引或密钥的名称,那就没问题。
这种情况的例子:
AdoCommand.CommandText := Str_SQL;
TRY
AdoCommand.Execute;
FINALLY
NotiFy_TimeOut ('Table was created', wait_for_one_sec);
END;
我的数据库引擎创建了这个SQL脚本,我将其传递到上面的字符串Str_SQL
:
CREATE TABLE GENGITFL
(
NR INT NOT NULL IDENTITY,
GJM CHAR(3) NOT NULL,
HEITI VARCHAR(25) NOT NULL,
KAUPG REAL NULL,
SOLUG REAL NULL,
TOLLG REAL NULL,
DUMMY VARCHAR(20) NULL,
UNIQUE (GJM),
PRIMARY KEY (GJM)
)
SQL Server自动创建这两个索引:
PK__GENGITFL__C51F17260A463F49
UQ__GENGITFL__C51F17277FA3E6E6
我不想将这些名称用于这些文件,我更喜欢名称:
IDX_GENGITFL_GJM
IDX_GENGITFL_NR
根据我的介绍,原因应该是显而易见的,运行时引擎无法自动创建这些名称,我认为它不是查找系统数据库中可用的索引文件的选项。如果我的外部描述说应该有索引,我只想通过使用前缀IDX_
在表名后面自动为索引创建名称,并在字段名称或名称之间加上下划线,作为{{1等等。
希望有人理解我糟糕的英语和演讲。我的英语很生气。
由于
编辑:在marc_s的帮助下,我的SQL“脚本”是这样的:
IDX_GENGITFL_GJM
再次感谢。
答案 0 :(得分:11)
如果您不想要系统默认名称 - 那么只需指定您自己的名称!:
CREATE TABLE GENGITFL
(
NR INT NOT NULL IDENTITY,
GJM CHAR(3) NOT NULL,
HEITI VARCHAR(25) NOT NULL,
KAUPG REAL NULL,
SOLUG REAL NULL,
TOLLG REAL NULL,
DUMMY VARCHAR(20) NULL,
CONSTRAINT IDX_GENGITFL_NR UNIQUE (GJM),
CONSTRAINT IDX_GENGITFL_GJM PRIMARY KEY (GJM)
)
在CONSTRAINT (yourownnamehere)
和UNIQUE
之前查看PRIMARY KEY
个人?
现在,您的约束被命名为您已定义。