Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Delphi:如何将表结构放入对象_Sql_Sql Server_Database_Delphi - Fatal编程技术网

Sql Delphi:如何将表结构放入对象

Sql Delphi:如何将表结构放入对象,sql,sql-server,database,delphi,Sql,Sql Server,Database,Delphi,使用Delphi我需要创建一个类,该类将包含特定的表结构(无数据),包括所有字段、约束、外键和索引。目标是建立“标准”表格,比较它们并找出差异。这个东西应该包括在我的大项目中,所以我不能使用任何“外部”比较器。此外,这个功能可能会被扩展,所以我需要有自己的实现。问题是我如何检索这些信息,既有连接字符串又知道特定的表名。SQL Server 2008正在使用中。自从我接触Delphi以来,已经有很长时间了,但我确实记得我曾经做过的几件事。像 select top 0 * from table 返

使用Delphi我需要创建一个类,该类将包含特定的表结构(无数据),包括所有字段、约束、外键和索引。目标是建立“标准”表格,比较它们并找出差异。这个东西应该包括在我的大项目中,所以我不能使用任何“外部”比较器。此外,这个功能可能会被扩展,所以我需要有自己的实现。问题是我如何检索这些信息,既有连接字符串又知道特定的表名。SQL Server 2008正在使用中。

自从我接触Delphi以来,已经有很长时间了,但我确实记得我曾经做过的几件事。像

select top 0 * from table
返回0条记录,但TQuery已用元数据“填充”。或者我认为在TClientDataSet上可以将行设置为-1,这具有相同的效果

正如我所说,我已经很久没有在Delphi中进行修补了,我使用的是BDE而不是本地客户端,所以这些都可能是无用的信息


不过,希望这能有所帮助

如果您查看Delphi源代码,它是这样做的:

从表中选择*,其中1=2

更新

可以使用以下约束检索元数据,例如:

SELECT * FROM databaseName.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 
Where TABLE_NAME='tableName' 

这只检索列名,而不检索约束、外键、索引和其他元数据。在SQL解析和执行过程中,使用负的
where
condition会浪费大量IO周期,因为它需要评估条件。例如,firebird服务器在负
条件下消耗
执行时间=110ms
。在执行过程中使用
从表中选择第一个0*
使用
执行时间=0ms
。与Antonio一样,hat只检索列名,而不检索约束、外键、索引和其他元数据。
选择top
语法不是跨不同数据库服务器的标准SQL。Firebird服务器使用的是
select first
,MySQL可能会使用
limit
关键字。虽然不同,但有人发布了一个答案(带有注释块和所有SQL脚本的答案),该答案检索所有表定义、数据库信息等,这可能会有所帮助。没有通用的方法,因此您;I’我必须声明一个抽象基,并使用TADOConnection.OpenSchema从DBMS特定的存储中填充实际的模式数据(例如:支持SQL-92的DBMS上的信息模式)。您将能够获得大部分信息。在sys表中可以找到其他与架构相关的信息(取决于您的sql Server版本)。