标签: metadata

列出指定表的所有列

我正在数据库中寻找一条我不了解的精确信息。数据库在一台单独的机器上,但我可以登录它,并psql以管理员权限启动命令行。

这是第三方产品,他们回答问题的速度很慢。我知道数据在那个数据库里面,所以我想做一点逆向工程。

给定一个表名,是否可以获得该表中列名的列表?

例如,在 SQL Server 中,可以将表转储到可重用CREATE语句中,该语句以文本方式列出了该表所包含的所有列。

postgresql metadata information-schema catalogs

386
推荐指数
5
解决办法
74万
查看次数

如何列出或搜索数据库中的所有列名?

我想在数据库中存在的列的名称中搜索字符串。

我正在处理一个维护项目,我处理的一些数据库有 150 多个表,所以我正在寻找一种快速的方法来做到这一点。

你有什么建议吗?

sql-server-2008 database-design sql-server metadata

40
推荐指数
3
解决办法
16万
查看次数

复制一个表的完整结构

使用某些方法,当您创建表的副本时,您会丢失索引、PK、FK 等。例如在 SQL Server 中,我可以说:

select * into dbo.table2 from dbo.table1;
Run Code Online (Sandbox Code Playgroud)

这只是表格的简单副本;缺少所有索引/约束。如何复制表结构(不使用备份)?

我主要希望手动执行此操作,但如果不可能,我将接受任何解决方案。

schema index sql-server constraint metadata

34
推荐指数
3
解决办法
15万
查看次数

如何获取数据库中所有分区表的列表?

如何获取数据库中所有分区表的列表?

我应该查看哪些系统表/DMV?

sql-server-2008 sql-server metadata partitioning

27
推荐指数
2
解决办法
12万
查看次数

如何强制 SQL Server Management Studio 更新 IntelliSense 缓存?

除非我将其关闭并重新启动,否则 SSMS 中的 IntelliSense 不会更新。我尝试在 SSMS 会话处于活动状态时断开与服务器的连接并重新连接,但这不起作用。

重建步骤:

  1. 创建一个表
  2. 从那个表中选择一些东西
  3. SSMS 在其下方显示波浪形红线,并提示“无效对象名称”
  4. 执行查询

如何在不重新启动 SSMS 的情况下强制 IntelliSense 更新?

sql-server ssms intellisense metadata

25
推荐指数
1
解决办法
2万
查看次数

在数据库中存储单位的最佳方式

我继承了一个包含数百个列的大型 (SQLServer) 数据库,这些列代表一件事或另一件事的数量。这些值的单位(例如“加仑”、“英寸”等)存储在扩展属性的 MS_Description 字段中。我想知道是否有更好的方法来存储这些信息。我认为用于文档目的很好,但很难根据这些数据进行可靠的单位换算计算。在这一点上,我不准备进行侵入性更改,但如果我有机会这样做,在这方面推荐的最佳实践是什么?在我的脑海中,选项可能包括:

  • 将列名称更改为包含的单位(例如,“TotalVolumeInGallons”。这会使信息更容易获得,但对我来说仍然很弱。)
  • 添加一个单独的“单位”列以对应每个“金额”列(此列可以是 nvarchar 或者它可以是单独的 Units 表的外键,这可能会使计算单位转换变得更容易。另一方面,添加如此许多列可以使我的数据库的大小翻倍 - 具有非常冗余的数据。)
  • 在专门用于单位的扩展属性中创建一个新字段。(不幸的是,我认为这不能成为 Units 表的外键。)
  • 还有我忽略的另一个想法吗?

更新:阅读@Todd Everett 的回答后,我想到了一个可能的解决方案,所以我将继续回答我自己的问题。(见下文)

database-design sql-server metadata

23
推荐指数
5
解决办法
2万
查看次数

sys.databases 中某些列的整理是怎么回事?

我试图UNPIVOTsys.databases2005 年到 2012 年的各种版本的 SQL Server 中包含的各种列上运行。

UNPIVOT与以下错误消息失败:

Msg 8167, Level 16, State 1, Line 48

“CompatibilityLevel”列的类型与 UNPIVOT 列表中指定的其他列的类型冲突。

T-SQL:

DECLARE @dbname SYSNAME;
SET @dbname = DB_NAME();

SELECT [Database]            = unpvt.DatabaseName
    , [Configuration Item]   = unpvt.OptionName
    , [Configuration Value]  = unpvt.OptionValue
FROM (
    SELECT 
        DatabaseName = name 
        , RecoveryModel                 = CONVERT(VARCHAR(50), d.recovery_model_desc)
        , CompatibilityLevel            = CONVERT(VARCHAR(50), CASE d.[compatibility_level] WHEN 70 THEN 'SQL Server 7' WHEN 80 THEN 'SQL Server 2000' WHEN 90 THEN 'SQL …
Run Code Online (Sandbox Code Playgroud)

sql-server collation metadata

21
推荐指数
3
解决办法
6134
查看次数

查找与给定主键关联的外键

我想要一种方法来确定给定数据库中的哪些列通过 PK/FK 关系连接。我可以通过以下方式返回给定表的 PK/FK 信息

SELECT *  
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu 
WHERE EXISTS (
    SELECT tc.* 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
    WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase'  
        AND tc.TABLE_NAME = 'MyTable'  
        /*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/
        AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME);
GO
Run Code Online (Sandbox Code Playgroud)

但是对于从这样的查询返回的 PK,我如何建立关联的 FK(假设有一个)?

我知道您还可以通过以下方式获取引用的表:

SELECT CONSTRAINT_NAME = name, 
       FOREIGN_SCHEMA = OBJECT_SCHEMA_NAME(parent_object_id), 
       FOREIGN_TABLE = OBJECT_NAME(parent_object_id), 
       REFERENCED_SCHEMA = OBJECT_SCHEMA_NAME(referenced_object_id), 
       REFERENCED_TABLE = OBJECT_NAME(referenced_object_id) 
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id) = 'MyTable';
GO
Run Code Online (Sandbox Code Playgroud)

但我现在正在努力获得明确的列引用。

我正在为 QlikView 创建一个脚本生成器。要生成脚本,我需要约束和关联的链接。我需要任何给定列(如果有)的所有约束信息。

我想构建一个数据库类来保存给定数据库的所有信息。database.table.column.constraints然后将使用该类结构来获取 PK/FK 上不同列之间的匹配。

很明显,有些列只有 FK,在这种情况下,我还想检索相应键的 PK 信息;有些将只有PK,然后我想要相反的。有些当然可以两者兼而有之。

foreign-key sql-server metadata

19
推荐指数
2
解决办法
8万
查看次数

PostgreSQL 9.6 列删除和对带有 CTE 的 SQL 函数的副作用

如果我有一个包含 3 列的表格——比如 A、B 和 D——并且我不得不引入一个新的——比如 C 来替换 D 的当前位置。我将使用以下方法:

  1. 引入 2 个新列作为 C 和 D2。
  2. 将 D 的内容复制到 D2。
  3. 删除 D。
  4. 将 D2 重命名为 D。

新的顺序是 A、B、C 和 D。

我认为这是一种合法的做法,因为(到目前为止)它没有产生任何问题。

但是,今天我遇到了一个问题,当一个函数在同一张表上执行语句时返回以下错误:

table row type and query-specified row type do not match

以及以下细节:

Query provides a value for a dropped column at ordinal position 13

我尝试重新启动 PostgreSQL,VACUUM FULL按照此处此处的建议执行并最终删除并重新创建该函数,但这些解决方案不起作用(除了他们尝试解决系统表已被更改的情况之外)。

有幸使用一个非常小的数据库,我导出了它,删除了它,然后重新导入它并解决了我的功能问题


我意识到这样一个事实,即不应通过修改系统表(弄脏pg_attribute等)弄乱列的自然顺序,如下所示:

是否可以更改 Postgres 中列的自然顺序?

从我的函数抛出的错误来看,我现在意识到用我的方法改变列的顺序也是一个禁忌。任何人都可以说明为什么我所做的也是错误的? …

postgresql metadata database-internals functions postgresql-9.6

15
推荐指数
1
解决办法
1762
查看次数

如何编写查询以查找数据库中具有特定列名的所有表

我有一个包含大约 100 个表的数据库,我需要构建一个连接查询以从其中两个表中获取特定数据。我知道一个,但不知道另一个。基本上我需要这样的东西:

select <tables> from <database> where exists table.column name;

我怎样才能做到这一点?

metadata

14
推荐指数
2
解决办法
13万
查看次数