有没有办法在SQL Server CE中一次搜索所有表的字段?

我希望在WebMatrix(C#.net)环境(使用SQL Server Compact)中,有一种方法可以在所有表​​和字段中搜索值。 我有一堆(如100)表,通过WebMatrix连接,我正在寻找一个包含我需要的信息的表。

我来过这里: 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 SubQuery ————– —————

SELECT * FROM UserProfile JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE(RoleId 6)AND Email NOT IN(从UserProfile中选择电子邮件JOIN webpages_UsersInRoles ON UserProfile.UserID = webpages_UsersInRoles.UserId WHERE RoleId = 6)ORDER BY Email

我已经从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); } } } } 

有一个非常快速和脏的控制台应用程序将打印出包含文本值的任何表/列。 您可以根据自己的需要进行调整。 我希望这有帮助。

我不确定CE,但我使用这种方法:

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

即第三个下来。 在使用时阅读并理解语法,它是高度可修改的,可以按数据类型进行过滤。