数码资讯
了解SQL使用information_schema系统视图得到主外键的表的信息
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
那么SQL的表结构信息包括主外键的分析,自我成长指的information_schema看来,事实上,SQL 2005微软主推大家使用information_schema系统视图,而不是系统的东东,当然使用,目前仍有许多信息可以通过系统视图查询。这里我们以查询表结果信息为例来说明一些主要information_schema视图的使用。
首先,我们需要查询的列的信息,这就要求{ information_schema }。{柱}系统视图查询数据的列信息,SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
c.data_type,
c.character_maximum_length,
c.column_default,
c.is_nullable,
c.numeric_precision,
c.numeric_scale
从information_schema } { { } C柱。
在table_name = 'address
结果如下:
我们都知道,当我们定义列表是varchar(50)这些信息的普遍使用,在这里我们需要整合data_type和character_maximum_length,当character_maximum_length 1说即使没有指定特定的最大长度,数据是信息的长度是马克斯,numeric_precision,numeric_scale和数字需要整合信息。修改后的SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default
从information_schema } { { } C柱。
在table_name = 'address
为了c.ordinal_position
手术结果如下:
现在我们需要把这些列在表中的主键,外键的列,以及查询的主要外表的关键信息,我们需要使用{ information_schema }。{ table_constraints }和{ } { } information_schema key_column_usage系统视图。
手术结果如下:
修改我们以前的SQL语句:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default,
当tc.constraint_type =主要key'then'yes
else'no
最后is_primary_key,
当tc.constraint_type =外国key'then'yes
else'no
最后is_foreign_key
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
现在我们知道这些列是主键,它们是外键,接下来是与外键列相关联的外部表信息。在这里,我们需要使用{ } { } information_schema。referential_constraints系统运行以下视图。
因此,我们修改SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default,
当tc.constraint_type =主要key'then'yes
else'no
最后is_primary_key,
当tc.constraint_type =外国key'then'yes
else'no
最后is_foreign_key,
fkcu.column_name作为foreign_key,
Fkcu.TABLE_NAME AS FOREIGN_TABLE
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
左连接{ information_schema }。{ } referential_constraints FC kcu.constraint_schema = fc.constraint_schema
和kcu.constraint_name = fc.constraint_name
左连接{ information_schema }。{ } fkcu key_column_usage在fkcu.constraint_schema = fc.unique_constraint_schema
和fkcu.constraint_name = fc.unique_constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
我们的查询结果显示了太多的null,看起来不太舒服,我们的表名称应该显示一次,并修改SQL如下:
复制代码代码如下所示:
选择案例时,c.ordinal_position = 1
然后+ c.table_schema + c.table_name'。
别的
最后table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
isnull(c.column_default,)作为column_default,
当c.is_nullable = 'yes'then v
别的
最后is_nullable,
当tc.constraint_type =主要key'then v
别的
最后is_primary_key,
当tc.constraint_type =外国key'then v
别的
最后is_foreign_key,
isnull(fkcu.column_name,)作为foreign_key,
isnull(fkcu.table_name,)作为foreign_table
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
左连接{ information_schema }。{ } referential_constraints FC kcu.constraint_schema = fc.constraint_schema
和kcu.constraint_name = fc.constraint_name
左连接{ information_schema }。{ } fkcu key_column_usage在fkcu.constraint_schema = fc.unique_constraint_schema
和fkcu.constraint_name = fc.unique_constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
请出错地方!
首先,我们需要查询的列的信息,这就要求{ information_schema }。{柱}系统视图查询数据的列信息,SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
c.data_type,
c.character_maximum_length,
c.column_default,
c.is_nullable,
c.numeric_precision,
c.numeric_scale
从information_schema } { { } C柱。
在table_name = 'address
结果如下:
我们都知道,当我们定义列表是varchar(50)这些信息的普遍使用,在这里我们需要整合data_type和character_maximum_length,当character_maximum_length 1说即使没有指定特定的最大长度,数据是信息的长度是马克斯,numeric_precision,numeric_scale和数字需要整合信息。修改后的SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default
从information_schema } { { } C柱。
在table_name = 'address
为了c.ordinal_position
手术结果如下:
现在我们需要把这些列在表中的主键,外键的列,以及查询的主要外表的关键信息,我们需要使用{ information_schema }。{ table_constraints }和{ } { } information_schema key_column_usage系统视图。
手术结果如下:
修改我们以前的SQL语句:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default,
当tc.constraint_type =主要key'then'yes
else'no
最后is_primary_key,
当tc.constraint_type =外国key'then'yes
else'no
最后is_foreign_key
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
现在我们知道这些列是主键,它们是外键,接下来是与外键列相关联的外部表信息。在这里,我们需要使用{ } { } information_schema。referential_constraints系统运行以下视图。
因此,我们修改SQL如下:
复制代码代码如下所示:
选择c.table_schema,
c.table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
c.column_default,
c.is_nullable,
c.column_default,
当tc.constraint_type =主要key'then'yes
else'no
最后is_primary_key,
当tc.constraint_type =外国key'then'yes
else'no
最后is_foreign_key,
fkcu.column_name作为foreign_key,
Fkcu.TABLE_NAME AS FOREIGN_TABLE
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
左连接{ information_schema }。{ } referential_constraints FC kcu.constraint_schema = fc.constraint_schema
和kcu.constraint_name = fc.constraint_name
左连接{ information_schema }。{ } fkcu key_column_usage在fkcu.constraint_schema = fc.unique_constraint_schema
和fkcu.constraint_name = fc.unique_constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
我们的查询结果显示了太多的null,看起来不太舒服,我们的表名称应该显示一次,并修改SQL如下:
复制代码代码如下所示:
选择案例时,c.ordinal_position = 1
然后+ c.table_schema + c.table_name'。
别的
最后table_name,
c.column_name,
在((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length <> 1
)
然后c.data_type + '('
+投(c.character_maximum_length为varchar(4))+)
当((charindex('char ',c.data_type)> 0
或charindex('binary ',c.data_type)> 0
)
和c.character_maximum_length = - 1
然后c.data_type)+(最大)
当(charindex('numeric ',c.data_type)> 0)
然后c.data_type +(+(c.numeric_precision铸为varchar(4))
+,+投(c.numeric_scale为varchar(4))+)
其他c.data_type
最后data_type,
isnull(c.column_default,)作为column_default,
当c.is_nullable = 'yes'then v
别的
最后is_nullable,
当tc.constraint_type =主要key'then v
别的
最后is_primary_key,
当tc.constraint_type =外国key'then v
别的
最后is_foreign_key,
isnull(fkcu.column_name,)作为foreign_key,
isnull(fkcu.table_name,)作为foreign_table
从information_schema } { { } C柱。
左连接{ information_schema }。{ } kcu key_column_usage在kcu.table_schema = c.table_schema
和kcu.table_name = c.table_name
和kcu.column_name = c.column_name
左连接{ information_schema }。{ } tc.constraint_schema table_constraints TC = kcu.constraint_schema
和tc.constraint_name = kcu.constraint_name
左连接{ information_schema }。{ } referential_constraints FC kcu.constraint_schema = fc.constraint_schema
和kcu.constraint_name = fc.constraint_name
左连接{ information_schema }。{ } fkcu key_column_usage在fkcu.constraint_schema = fc.unique_constraint_schema
和fkcu.constraint_name = fc.unique_constraint_name
在c.table_name = 'address
为了c.ordinal_position
手术结果如下:
请出错地方!
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。