请问在 Delphi 中怎样获取 SQLServer2000中的数据库列表?怎样通过程序
往SQLServer2000中建立数据库,添加数据表等信息?

解决方案 »

  1.   

    获取数据库列表:sp_databases语法
    CREATE DATABASE database_name 
    [ ON 
        [ < filespec > [ ,...n ] ] 
        [ , < filegroup > [ ,...n ] ] 

    [ LOG ON { < filespec > [ ,...n ] } ] 
    [ COLLATE collation_name ]
    [ FOR LOAD | FOR ATTACH ] < filespec > ::=[ PRIMARY ]
    ( [ NAME = logical_file_name , ]
        FILENAME = 'os_file_name'
        [ , SIZE = size ]
        [ , MAXSIZE = { max_size | UNLIMITED } ]
        [ , FILEGROWTH = growth_increment ] ) [ ,...n ]< filegroup > ::=FILEGROUP filegroup_name < filespec > [ ,...n ]参数
    database_name新数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。database_name 最多可以包含 128 个字符,除非没有为日志指定逻辑名。如果没有指定日志文件的逻辑名,则 Microsoft&reg; SQL Server&#8482; 会通过向 database_name 追加后缀来生成逻辑名。该操作要求 database_name 在 123 个字符之内,以便生成的日志文件逻辑名少于 128 个字符。ON指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义主文件组的数据文件。主文件组的文件列表后可跟以逗号分隔的 <filegroup> 项列表(可选),<filegroup> 项用以定义用户文件组及其文件。n占位符,表示可以为新数据库指定多个文件。LOG ON指定显式定义用来存储数据库日志的磁盘文件(日志文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义日志文件。如果没有指定 LOG ON,将自动创建一个日志文件,该文件使用系统生成的名称,大小为数据库中所有数据文件总大小的 25%。FOR LOAD支持该子句是为了与早期版本的 Microsoft SQL Server 兼容。数据库在打开 dbo use only 数据库选项的情况下创建,并且将其状态设置为正在装载。SQL Server 7.0 版中不需要该子句,因为 RESTORE 语句可以作为还原操作的一部分重新创建数据库。FOR ATTACH指定从现有的一组操作系统文件中附加数据库。必须有指定第一个主文件的 <filespec> 条目。至于其它 <filespec> 条目,只需要与第一次创建数据库或上一次附加数据库时路径不同的文件的那些条目。必须为这些文件指定 <filespec> 条目。附加的数据库必须使用与 SQL Server 相同的代码页和排序次序创建。应使用 sp_attach_db 系统存储过程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必须指定 16 个以上的 <filespec> 项目时,才需要使用 CREATE DATABASE FOR ATTACH。 如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。collation_name指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE。PRIMARY指定关联的 <filespec> 列表定义主文件。主文件组包含所有数据库系统表。还包含所有未指派给用户文件组的对象。主文件组的第一个 <filespec> 条目成为主文件,该文件包含数据库的逻辑起点及其系统表。一个数据库只能有一个主文件。如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。NAME为由 <filespec> 定义的文件指定逻辑名称。如果指定了 FOR ATTACH,则不需要指定 NAME 参数。logical_file_name用来在创建数据库后执行的 Transact-SQL 语句中引用文件的名称。logical_file_name 在数据库中必须唯一,并且符合标识符的规则。该名称可以是字符或 Unicode 常量,也可以是常规标识符或定界标识符。FILENAME为 <filespec> 定义的文件指定操作系统文件名。'os_file_name'操作系统创建 <filespec> 定义的物理文件时使用的路径名和文件名。os_file_name 中的路径必须指定 SQL Server 实例上的目录。os_file_name 不能指定压缩文件系统中的目录。如果文件在原始分区上创建,则 os_file_name 必须只指定现有原始分区的驱动器字母。每个原始分区上只能创建一个文件。原始分区上的文件不会自动增长;因此,os_file_name 指定原始分区时,不需要指定 MAXSIZE 和 FILEGROWTH 参数。SIZE指定 <filespec> 中定义的文件的大小。如果主文件的 <filespec> 中没有提供 SIZE 参数,那么 SQL Server 将使用 model 数据库中的主文件大小。如果次要文件或日志文件的 <filespec> 中没有指定 SIZE 参数,则 SQL Server 将使文件大小为 1 MB。size<filespec> 中定义的文件的初始大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。size 的最小值为 512 KB。如果没有指定 size,则默认值为 1 MB。为主文件指定的大小至少应与 model 数据库的主文件大小相同。MAXSIZE指定 <filespec> 中定义的文件可以增长到的最大大小。max_size<filespec> 中定义的文件可以增长到的最大大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。如果没有指定 max_size,那么文件将增长到磁盘变满为止。 
      

  2.   

    示例
    A. 创建指定数据文件和事务日志文件的数据库
    下面的示例创建名为 Sales 的数据库。因为没有使用关键字 PRIMARY,第一个文件 (Sales_dat) 成为主文件。因为 Sales_dat 文件的 SIZE 参数没有指定 MB 或 KB,因此默认为 MB,以兆字节为单位进行分配。Sales_log 文件以兆字节为单位进行分配,因为 SIZE 参数中显式声明了 MB 后缀。USE master
    GO
    CREATE DATABASE Sales
    ON 
    ( NAME = Sales_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 )
    LOG ON
    ( NAME = 'Sales_log',
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB )
    GOB. 指定多个数据文件和事务日志文件创建数据库
    下面的示例使用三个 100 MB 的数据文件和两个 100 MB 的事务日志文件创建了名为 Archive 的数据库。主文件是列表中的第一个文件,并使用 PRIMARY 关键字显式指定。事务日志文件在 LOG ON 关键字后指定。注意 FILENAME 选项中所用的文件扩展名:主要数据文件使用 .mdf,次要数据文件使用 .ndf,事务日志文件使用 .ldf。USE master
    GO
    CREATE DATABASE Archive 
    ON
    PRIMARY ( NAME = Arch1,
          FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf',
          SIZE = 100MB,
          MAXSIZE = 200,
          FILEGROWTH = 20),
    ( NAME = Arch2,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat2.ndf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20),
    ( NAME = Arch3,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat3.ndf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    LOG ON 
    ( NAME = Archlog1,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog1.ldf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20),
    ( NAME = Archlog2,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog2.ldf',
       SIZE = 100MB,
       MAXSIZE = 200,
       FILEGROWTH = 20)
    GOC. 创建简单的数据库
    本例创建名为 Products 的数据库,并指定单个文件。指定的文件成为主文件,并会自动创建一个 1 MB 的事务日志文件。因为主文件的 SIZE 参数中没有指定 MB 或 KB,所以主文件将以兆字节为单位进行分配。因为没有为事务日志文件指定 <filespec>,所以事务日志文件没有 MAXSIZE,可以增长到填满所有可用的磁盘空间为止。USE master
    GO
    CREATE DATABASE Products
    ON 
    ( NAME = prods_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods.mdf',
       SIZE = 4,
       MAXSIZE = 10,
       FILEGROWTH = 1 )
    GOD. 不指定文件创建数据库
    下面的示例创建名为 mytest 的数据库,并创建相应的主文件和事务日志文件。因为该语句没有 <filespec> 项,所以主数据库文件的大小为 model 数据库主文件的大小。事务日志文件的大小为 model 数据库事务日志文件的大小。因为没有指定 MAXSIZE,文件可以增长到填满所有可用的磁盘空间为止。CREATE DATABASE mytestE. 不指定 SIZE 创建数据库
    下面的示例创建名为 products2 的数据库。文件 prods2_dat 将成为主文件,大小等于 model 数据库中主文件的大小。事务日志文件会自动创建,其大小为主文件大小的 25% 或 512 KB 中的较大值。因为没有指定 MAXSIZE,文件可以增长到填满所有可用的磁盘空间为止。USE master
    GO
    CREATE DATABASE Products2
    ON 
    ( NAME = prods2_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf' )
    GOF. 使用文件组创建数据库
    下面的示例使用三个文件组创建名为 sales 的数据库: 主文件组包含文件 Spri1_dat 和 Spri2_dat。指定这些文件的 FILEGROWTH 增量为 15%。
    名为 SalesGroup1 的文件组包含文件 SGrp1Fi1 和 SGrp1Fi2。
    名为 SalesGroup2 的文件组包含文件 SGrp2Fi1 和 SGrp2Fi2。 
    CREATE DATABASE Sales
    ON PRIMARY
    ( NAME = SPri1_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 15% ),
    ( NAME = SPri2_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri2dt.ndf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 15% ),
    FILEGROUP SalesGroup1
    ( NAME = SGrp1Fi1_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 ),
    ( NAME = SGrp1Fi2_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi2dt.ndf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 ),
    FILEGROUP SalesGroup2
    ( NAME = SGrp2Fi1_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 ),
    ( NAME = SGrp2Fi2_dat,
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf',
       SIZE = 10,
       MAXSIZE = 50,
       FILEGROWTH = 5 )
    LOG ON
    ( NAME = 'Sales_log',
       FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB )
    GOG. 附加数据库
    示例 B 创建一个包含下列物理文件的名为 Archive 的数据库:c:\program files\microsoft sql server\mssql\data\archdat1.mdf
    c:\program files\microsoft sql server\mssql\data\archdat2.ndf
    c:\program files\microsoft sql server\mssql\data\archdat3.ndf
    c:\program files\microsoft sql server\mssql\data\archlog1.ldf
    c:\program files\microsoft sql server\mssql\data\archlog2.ldf可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。sp_detach_db Archive
    GO
    CREATE DATABASE Archive
    ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf')
    FOR ATTACH
    GO
      

  3.   

    CREATE TABLE
    创建新表。语法
    CREATE TABLE
        [ database_name.[ owner ] .| owner.] table_name
        ( { < column_definition >
            | column_name AS computed_column_expression
            | < table_constraint > ::= [ CONSTRAINT constraint_name ] }            | [ { PRIMARY KEY | UNIQUE } [ ,...n ]
        ) [ ON { filegroup | DEFAULT } ] 
    [ TEXTIMAGE_ON { filegroup | DEFAULT } ] < column_definition > ::= { column_name data_type }
        [ COLLATE < collation_name > ]
        [ [ DEFAULT constant_expression ]
            | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
        ] 
        [ ROWGUIDCOL]
        [ < column_constraint > ] [ ...n ] < column_constraint > ::= [ CONSTRAINT constraint_name ]
        { [ NULL | NOT NULL ]
            | [ { PRIMARY KEY | UNIQUE }
                [ CLUSTERED | NONCLUSTERED ]
                [ WITH FILLFACTOR = fillfactor ]
                [ON {filegroup | DEFAULT} ] ]
            ] 
            | [ [ FOREIGN KEY ]
                REFERENCES ref_table [ ( ref_column ) ]
                [ ON DELETE { CASCADE | NO ACTION } ]
                [ ON UPDATE { CASCADE | NO ACTION } ]
                [ NOT FOR REPLICATION ]
            ] 
            | CHECK [ NOT FOR REPLICATION ]
            ( logical_expression ) 
        } < table_constraint > ::= [ CONSTRAINT constraint_name ]
        { [ { PRIMARY KEY | UNIQUE }
            [ CLUSTERED | NONCLUSTERED ]
            { ( column [ ASC | DESC ] [ ,...n ] ) }
            [ WITH FILLFACTOR = fillfactor ]
            [ ON { filegroup | DEFAULT } ]
        ] 
        | FOREIGN KEY
            [ ( column [ ,...n ] ) ]
            REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [ NOT FOR REPLICATION ]
        | CHECK [ NOT FOR REPLICATION ]
            ( search_conditions ) 
        } 参数
    database_name是要在其中创建表的数据库名称。database_name 必须是现有数据库的名称。如果不指定数据库,database_name 默认为当前数据库。当前连接的登录必须在 database_name 所指定的数据库中有关联的现有用户 ID,而该用户 ID 必须具有创建表的权限。owner是新表所有者的用户 ID 名,owner 必须是 database_name 所指定的数据库中的现有用户 ID,owner 默认为与 database_name 所指定的数据库中的当前连接相关联的用户 ID。如果 CREATE TABLE 语句由 sysadmin 固定服务器角色成员或 database_name 所指定的数据库中的 db_dbowner 或 db_ddladmin 固定数据库角色成员执行,则 owner 可以指定与当前连接的登录相关联的用户 ID 以外的其它用户 ID。如果与执行 CREATE TABLE 语句的登录相关联的用户 ID 仅具有创建表的权限,则 owner 必须指定与当前登录相关联的用户 ID。sysadmin 固定服务器角色成员或别名为 dbo 用户的登录与用户 ID dbo 相关联;因此,由这些用户创建的表的默认所有者为 dbo。不是由上述两种角色的登录创建的表所有者默认为与该登录相关联的用户 ID。table_name是新表的名称。表名必须符合标识符规则。数据库中的 owner.table_name 组合必须唯一。table_name 最多可包含 128 个字符,但本地临时表的表名(名称前有一个编号符 #)最多只能包含 116 个字符。column_name是表中的列名。列名必须符合标识符规则,并且在表内唯一。以 timestamp 数据类型创建的列可以省略 column_name。如果不指定 column_name,timestamp 列的名称默认为 timestamp。computed_column_expression是定义计算列值的表达式。计算列是物理上并不存储在表中的虚拟列。计算列由同一表中的其它列通过表达式计算得到。例如,计算列可以这样定义:cost AS price * qty。表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何其它可使用常规表达式的位置,但下列情况除外: 计算列不能用作 DEFAULT 或 FOREIGN KEY 约束定义,也不能与 NOT NULL 约束定义一起使用。但是,如果计算列由具有确定性的表达式定义,并且索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作 PRIMARY KEY 或 UNIQUE 约束的一部分。 
    例如,如果表中含有整型列 a 和 b,则可以在计算列 a+b 上创建索引。但不能在计算列 a+DATEPART(dd, GETDATE()) 上创建索引,因为在以后的调用中,其值可能发生改变。计算列不能作为 INSERT 或 UPDATE 语句的目标。 
    说明  表中计算列所使用的列值因行而异,因此每行的计算列值可能不同。计算列的为空性是由 SQL Server 根据使用的表达式自动确定的。即使只有不可为空的列,大多数表达式的结果也认为是可为空的,因为可能的下溢或溢出也将生成 NULL 结果。使用 COLUMNPROPERTY 函数(AllowsNull 属性)查看表中任何计算列的为空性。通过指定 ISNULL(check_expression, constant),其中常量为替代任何 NULL 结果的非 NULL 值,可为空的表达式 expr 可以转换为不可为空的表达式。ON {filegroup | DEFAULT}指定存储表的文件组。如果指定 filegroup,则表将存储在指定的文件组中。数据库中必须存在该文件组。如果指定 DEFAULT,或者根本未指定 ON 参数,则表存储在默认文件组中。ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 约束或 UNIQUE 约束中指定。这些约束会创建索引。如果指定 filegroup,则索引将存储在指定的文件组中。如果指定 DEFAULT,则索引将存储在默认文件组中。如果约束中没有指定文件组,则索引将与表存储在同一文件组中。如果 PRIMARY KEY 约束或 UNIQUE 约束创建聚集索引,则表的数据页将与索引存储在同一文件组中。说明  在 ON {filegroup | DEFAULT} 和 TEXTIMAGE_ON {filegroup | DEFAULT} 的上下文中,DEFAULT 并不是关键字。DEFAULT 是默认文件组的标识符并需对其进行定界,如 ON "DEFAULT"、ON [DEFAULT] 和 TEXTIMAGE_ON "DEFAULT" 或 TEXTIMAGE_ON [DEFAULT]。
    TEXTIMAGE_ON是表示 text、ntext 和 image 列存储在指定文件组中的关键字。如果表中没有 text、ntext 或 image 列,则不能使用 TEXTIMAGE ON。如果没有指定 TEXTIMAGE_ON,则 text、ntext 和 image 列将与表存储在同一文件组中。data_type指定列的数据类型。可以是系统数据类型或用户定义数据类型。用户定义数据类型必须先用 sp_addtype 创建,然后才能在表定义中使用。在 CREATE TABLE 语句中,用户定义数据类型的 NULL/NOT NULL 赋值可被替代。但长度标准不能更改;不能在 CREATE TABLE 语句中指定用户定义数据类型的长度。DEFAULT如果在插入过程中未显式提供值,则指定为列提供的值。DEFAULT 定义可适用于除定义为 timestamp 或带 IDENTITY 属性的列以外的任何列。除去表时,将删除 DEFAULT 定义。只有常量值(如字符串)、系统函数(如 SYSTEM_USER())或 NULL 可用作默认值。为保持与 SQL Server 早期版本的兼容,可以给 DEFAULT 指派约束名。constant_expression是用作列的默认值的常量、NULL 或系统函数。IDENTITY表示新列是标识列。当向表中添加新行时,Microsoft&reg; SQL Server&#8482; 将为该标识列提供一个唯一的、递增的值。标识列通常与 PRIMARY KEY 约束一起用作表的唯一行标识符。可以将 IDENTITY 属性指派给 tinyint、smallint、int、bigint、decimal(p,0) 或 numeric(p,0) 列。对于每个表只能创建一个标识列。不能对标识列使用绑定默认值和 DEFAULT 约束。必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
      

  4.   

    select * from master.dbo.sysdatabases
      

  5.   

    RockEx(石头_) 肯定是sql server的狂热者,不过这些从sql的联机帮助就可以找到啦,呵呵
    但是ul10 () 问的是:如何在 Delphi 中怎样获取 SQLServer2000中的数据库列表?呀!你给他补sql语法干吗?这个不能在sql sever的查询分析器上做的呀
    在delphi中可以用GetTableName和GetProdureNames返回数据库包含的存储过程名列表
    procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);
    例子:ADOConnection1.GetTableNames(ListBox2.Items, False);
    procedure GetProcedureNames(List: TStrings);
    例子:ADOConnection1.GetProcedureNames(ListBox1.Items);
    Caution:参数List返回存储过程名称列表;返回的存储过程名称可以赋值个体TADOStoredProc控件的ProcedureName属性.
      

  6.   

    获得所有的数据库名称
    select Name from master.dbo.sysdatabases
      

  7.   

    建立数据库
    use master
    create database aa
      

  8.   

    select Name from master.dbo.sysdatabases