9

LINQPad で、LINQ を使用して SYSOBJECTS テーブルまたはさまざまな INFORMATION_SCHEMA.xxx ビューにアクセスする方法はありますか?

テーブルとストアド プロシージャが多すぎてすべての名前を覚えられないため、巨大な会社のデータベースから名前の一部を検索するのに多くの時間を費やしています。

LINQPadでSQLを入力して実行できることは知っていますが、LINQの方が楽しいので、SQLではなくLINQでこれを実行したいと思います:)

ありがとう

キサンタラス

4

6 に答える 6

7

はい、できます。

選択した接続にシステム ビューと SP を含め、次のように LINQ を使用するだけです。

sys.Sysobjects.Where(sp => sp.Xtype == "P")  // returns SPs
sys.Sysobjects.Where(t => t.Xtype == "U")    // returns Tables

または sys.Views を直接使用 [例は、文字列 "person" を含む列を持つすべてのテーブルを返します]:

sys.Tables.Join(sys.Columns,
                t => t.Object_id,
                c => c.Object_id,
                (t, c) => new { t, c })
    .Where(x => x.c.Name.Contains("person"))
    .Select(x => new { ObjName = x.t.Name,
                       ChildName = x.c.Name } )
            .Distinct()
于 2013-01-09T16:48:56.683 に答える
6

次のように、SQL を LINQ ステートメントに埋め込むこともできます。

void Main()
{
    var matches = this.ExecuteQuery<SysObject>("SELECT name, type_desc AS "
                + "TypeDesc FROM [sys].[objects]");

    foreach(var match in matches)
        Console.WriteLine("{0,-30}{1}", (match.Name + ":"), match.TypeDesc);
}

// Define other methods and classes here
class SysObject
{
    public string Name;
    public string TypeDesc;
    // etc...
}

デフォルトでは、LinqPad は結果に等幅フォントを使用しませんが、次の CSS を「編集 -> 設定 -> 結果 -> エディターの起動」に貼り付けることで簡単に変更できます。

body { font-family: コンソラ、モノスペース。}

于 2010-09-13T23:15:33.800 に答える
0

SYSOBJECTS の内容で新しいテーブルを作成し、新しいテーブル内を検索します

select * into SYSOBJECTS_COPY from SYS.OBJECTS

from o in SYSOBJECTS_COPY.AsEnumerable()
where Regex.IsMatch( d.Name, "partialName", RegexOptions.IgnoreCase )
select o
于 2010-08-27T19:06:49.930 に答える
0
from d in Databases
select d

LINQPad のデータベース接続がマスター データベースを指している場合。

于 2010-05-14T12:46:41.880 に答える
0

このコードはオブジェクト定義も返し、必要に応じて定義内を検索できます。

void Main()
    {
        var matches = FetchObjects(true);

        var searchTerm = "tblName"; //<--Change this to filter for what you are looking for
        bool searchName = true; //search the object name
        bool searchDef = false; //search inside object definition (ie the stored procedure definition)
        TypeDescs typeDesc = TypeDescs.Any; //specify whether you want to limit your search to tables or stored procedures

        matches
            .Where(x=> (
                (searchName && x.Name.Contains(searchTerm)) 
                || (searchDef && (x.ObjectDefinition!=null && x.ObjectDefinition.Contains(searchTerm))) )
                && (typeDesc==TypeDescs.Any || x.TypeDesc == typeDesc.ToString())

                )
            .Select(x=> new {x}).Dump();

    }
    IEnumerable<SysObject> FetchObjects(bool includeDefinitions){
         return this.ExecuteQuery<SysObject>("SELECT Name=convert(varchar(30), name), type_desc AS " 
                    + " TypeDesc "
                    + string.Format(", ObjectDefinition={0}", (includeDefinitions)?"OBJECT_DEFINITION (OBJECT_ID(name))":"NULL")
                    + " FROM [sys].[objects]");
    }
    enum TypeDescs {Any, SQL_STORED_PROCEDURE, USER_TABLE}
    class SysObject 
    { 
        public string Name; 
        public string TypeDesc; 
        public string ObjectDefinition;
    } 
于 2012-04-06T19:30:02.170 に答える