Jadual Kandungan
解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(译)
Rumah pangkalan data tutorial mysql 解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(

解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(

Jun 07, 2016 pm 03:19 PM
sqlserver Sekarang lulus

解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译) http://improve.dk/orcamdf-now-exposes-metadata-through-system-dmvs/ 我坐在去丹麦的火车上,参加在北欧的SQL RALLY会议的最后一站。在演讲的过程中,我根据OrcaMDF 的工作比较含蓄地宣

解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(译)

http://improve.dk/orcamdf-now-exposes-metadata-through-system-dmvs/

我坐在去丹麦的火车上,参加在北欧的SQL RALLY会议的最后一站。在演讲的过程中,我根据OrcaMDF 的工作比较含蓄地宣布了OrcaMDF可以读取元数据

现在,我也不妨在这里分享。除了在OrcaMDF中扩大对核心引擎的支持之外,另一个重要的我想要实现的主要功能之一就是显示关于的你的数据库的元数据

你的表,列,数据库是怎麽展开的?

解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(

 

 

避免错误的抽象

我最初的想法是在上层对象下面创建自己的抽象层,你可以通过database.GetMetadata().UserTables 枚举出你的所有的用户表

你可以获取用户表的列表,包括数据列。从开发层面考虑这是一个非常清晰的接口,每样东西都是普通的.NET对象。

然而,这需要我自己去定义抽象- 如何去划分出哪些数据需要暴露,哪些数据不能,怎样抽象对于DBA是最自然的,需不需要使用

类似SQLSERVER的 sys. DMVs

 

从SQLSERVER里暴露出内置的DMVs

我花费了一些时间考虑最后会有哪类人使用OrcaMDF ,最后得出结论是这个世界可能只有四类人会使用

而将这四类人再拆分开最终只有DBA和SQLSERVER开发人员。而他们通常会通过DVMs 例如sys.tables,sys.columns,sys.indexes

来浏览SQLSERVER数据库的元数据。那么能够使我有信心开发这个功能的动力是我已经能解析出所有的系统表,并且使用 SELECT OBJECT_DEFINITION() 

我能够看到内置的系统DMVs的源代码。因此,创建我自己的内置DMVs的复制品是一件很简单事

 

 

在OrcaMDF里如何使用DMVs 

比如我们需要获取某个表的所有列的信息,我们会建立如下SQL语句

1

2

3

4

5

6

7

8

<span>SELECT</span><span>

    c.</span><span>*</span>

<span>FROM</span><span>

    sys.columns c

</span><span>INNER</span> <span>JOIN</span><span>

    sys.tables t </span><span>ON</span> c.<span>object_id</span> <span>=</span> t.<span>object_id</span>

<span>WHERE</span><span>

    t.name </span><span>=</span> <span>'</span><span>Persons</span><span>'</span>

Salin selepas log masuk

在OrcaMDF里的C#代码里看起来会像这样:

1

2

3

4

5

6

7

8

9

10

<span>using</span> (<span>var</span> db = <span>new</span> Database(<span>new</span>[] { <span>@"</span><span>C:Test.mdf</span><span>"</span><span> }))

{

    </span><span>var</span> sys =<span> db.Dmvs;

 

    </span><span>var</span> table = sys.Tables.Where(t =&gt; t.Name == <span>"</span><span>Persons</span><span>"</span><span>).Single();

    </span><span>var</span> columns = sys.Columns.Where(c =&gt; c.ObjectID ==<span> table.ObjectID);

 

    </span><span>foreach</span> (<span>var</span> col <span>in</span><span> columns)

        Console.WriteLine(col.Name);

}</span>

Salin selepas log masuk

如果你更喜欢SQL-esque LINQ的语法,你当然可以像下面那样做

1

2

3

4

5

6

7

8

9

10

11

12

<span>using</span> (<span>var</span> db = <span>new</span> Database(<span>new</span>[] { <span>@"</span><span>C:Test.mdf</span><span>"</span><span> }))

{

    </span><span>var</span> sys =<span> db.Dmvs;

 

    </span><span>var</span> columns =    <span>from</span> c <span>in</span><span> sys.Columns

            join t </span><span>in</span><span> sys.Tables on c.ObjectID equals t.ObjectID

            </span><span>where</span> t.Name == <span>"</span><span>Persons</span><span>"</span>

            <span>select</span><span> c;

 

    </span><span>foreach</span> (<span>var</span> col <span>in</span><span> columns)

        Console.WriteLine(col.Name);

}</span>

Salin selepas log masuk

不管使用哪种写法,结果都会像下面那样

解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(

 

 

可用的DMVs有哪些

如果你获取到最新的已提交的OrcaMDF代码,你可以访问下面的DMVs,他们是通过SQLSERVER暴露出来的

1

2

3

4

5

6

7

8

9

10

<span>sys.columns

sys.indexes

sys.index_columns

sys.objects

sys.objects$

sys.system_internals_allocation_units

sys.system_internals_partitions

sys.system_internals_partition_columns

sys.tables

sys.types</span>

Salin selepas log masuk

 

如果你对DMV 有期望可以跟我联系,我会让你愿望成真!

 

第九篇完

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah yang objek bernama sudah wujud dalam pangkalan data sqlserver Bagaimana untuk menyelesaikan masalah yang objek bernama sudah wujud dalam pangkalan data sqlserver Apr 05, 2024 pm 09:42 PM

Bagaimana untuk menyelesaikan masalah yang objek bernama sudah wujud dalam pangkalan data sqlserver

Bagaimana untuk mengimport fail mdf ke dalam sqlserver Bagaimana untuk mengimport fail mdf ke dalam sqlserver Apr 08, 2024 am 11:41 AM

Bagaimana untuk mengimport fail mdf ke dalam sqlserver

Apa yang perlu dilakukan jika perkhidmatan sqlserver tidak dapat dimulakan Apa yang perlu dilakukan jika perkhidmatan sqlserver tidak dapat dimulakan Apr 05, 2024 pm 10:00 PM

Apa yang perlu dilakukan jika perkhidmatan sqlserver tidak dapat dimulakan

Bagaimana untuk memulihkan pangkalan data yang dipadam secara tidak sengaja dalam sqlserver Bagaimana untuk memulihkan pangkalan data yang dipadam secara tidak sengaja dalam sqlserver Apr 05, 2024 pm 10:39 PM

Bagaimana untuk memulihkan pangkalan data yang dipadam secara tidak sengaja dalam sqlserver

Di manakah pangkalan data sqlserver? Di manakah pangkalan data sqlserver? Apr 05, 2024 pm 08:21 PM

Di manakah pangkalan data sqlserver?

Bagaimana untuk menyemak nombor port sqlserver Bagaimana untuk menyemak nombor port sqlserver Apr 05, 2024 pm 09:57 PM

Bagaimana untuk menyemak nombor port sqlserver

Bagaimana untuk menyelesaikan ralat SqlServer sambungan Java Bagaimana untuk menyelesaikan ralat SqlServer sambungan Java May 01, 2023 am 09:22 AM

Bagaimana untuk menyelesaikan ralat SqlServer sambungan Java

Bagaimana untuk memadam sqlserver jika pemasangan gagal? Bagaimana untuk memadam sqlserver jika pemasangan gagal? Apr 05, 2024 pm 11:27 PM

Bagaimana untuk memadam sqlserver jika pemasangan gagal?

See all articles