3

WebMatrix (C#.net) 環境 (SQL Server Compact を使用) 内で、すべてのテーブルとフィールドで値を検索する方法があることを期待していました。WebMatrix 経由で接続された (100 のような) テーブルがたくさんあり、必要な情報を保持するテーブルを探しています。

私はここにいます: http://blogs.thesitedoctor.co.uk/tim/2007/11/02/How+To+Search+Every+Table+And+Field+In+A+SQL+Server+Database.aspx

そしてここで、stackoverflow で: すべてのテーブル、すべての列で特定の値 SQL Server を検索します。

ここだけでなく: SQL Server データベース内の任意の場所で値を見つけるにはどうすればよいですか?

残念ながら、現在の環境でこれらのメソッドを実装する方法はわかりませんが、私が求めていることを実際に実行する方法がない可能性があることに気付きました。

私が求めていることを行う方法があるかどうかにかかわらず、少なくとも知りたいので、別の方法を探すことができます。

ありがとう!

---------------SQL CE で動作する SQL サブクエリ-------------- ---------------

SELECT * FROM UserProfile JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE (RoleId <> 6) AND Email NOT IN (SELECT Email FROM UserProfile JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE RoleId = 6) メールで注文

4

2 に答える 2

4

Syn123の回答からSQLを適応させました。これまでのところ、次のとおりです。

SELECT c.TABLE_NAME, c.COLUMN_NAME
FROM   INFORMATION_SCHEMA.COLUMNS AS c 
       INNER JOIN INFORMATION_SCHEMA.Tables AS t ON t.TABLE_NAME = c.TABLE_NAME
WHERE  (c.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext')) AND (t.TABLE_TYPE = 'TABLE')

私が抱えている問題は、SQL CE でサブクエリを実行できないため、結果セットから選択できないことです。.MDF データベース ファイルにアクセスできる場合は、上記の SQL によって返されたセットを使用して特定のキーワードを検索する小さなコンソール アプリを作成できます。動的 SQL を作成する方法が必要ですが、SQL CE は EXEC をサポートしていないため、これは困難であり、それ自体ではおそらく不可能です。

編集:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlServerCe;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SQLCESearch
{
    class Program
    {
        static void Main(string[] args)
        {
            SearchText("Nancy");
            Console.ReadKey();
        }

        private static void SearchText(string searchText)
        {
            string connStr = "Data Source=Northwind40.sdf;Persist Security Info=False;";
            DataTable dt = new DataTable();
            try
            {
                string sql = "SELECT c.TABLE_NAME, c.COLUMN_NAME ";
                sql += "FROM   INFORMATION_SCHEMA.COLUMNS AS c ";
                sql += "INNER JOIN INFORMATION_SCHEMA.Tables AS t ON t.TABLE_NAME = c.TABLE_NAME ";
                sql += "WHERE  (c.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext')) AND (t.TABLE_TYPE = 'TABLE') ";

                SqlCeDataAdapter da = new SqlCeDataAdapter(sql, connStr);
                da.Fill(dt);

                foreach (DataRow dr in dt.Rows)
                {
                    string dynSQL = "SELECT [" + dr["COLUMN_NAME"] + "]";
                    dynSQL += " FROM [" + dr["TABLE_NAME"] + "]";
                    dynSQL += " WHERE [" + dr["COLUMN_NAME"] + "] LIKE '%" + searchText + "%'";

                    DataTable result = new DataTable();
                    da = new SqlCeDataAdapter(dynSQL, connStr);
                    da.Fill(result);
                    foreach (DataRow r in result.Rows)
                    {
                        Console.WriteLine("Table Name: " + dr["TABLE_NAME"]);
                        Console.WriteLine("Column Name: " + dr["COLUMN_NAME"]);
                        Console.WriteLine("Value: " + r[0]);
                    }
                }
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
            }


        }
    }
}

テキストの値を含む任意のテーブル/列を出力する非常に迅速で汚いコンソール アプリケーションがあります。ニーズに合わせて調整できます。これが役立つことを願っています。

于 2013-03-04T22:53:03.567 に答える
0

CEについてはわかりませんが、次の方法を使用します。

http://www.dbforums.com/microsoft-sql-server/972792-find-text-string-database.html

つまり、3番目のダウン。使用するときに構文を読んで理解してください。高度に変更可能で、データ型でフィルタリングできます。

于 2013-03-04T20:24:46.210 に答える