需要有关sql server表的建议吗

需要有关sql server表的建议吗,sql,sql-server,tsql,Sql,Sql Server,Tsql,有人知道如何使用sql server系统表获取表名和列名吗 示例:我知道数据库中的某个表有一个包含ID=1125412的字段 是否有方法在数据库上运行全局查询,以获取此数据所在的列名和表名 如果您知道一个列名,并且希望知道该列名所属的表名,那么这是否可行?这是超级讨厌,但它会起作用: -- Finding all tables with an ID column SELECT SCHEMA_NAME(T.schema_id) SchemaName, T.name TableName

有人知道如何使用sql server系统表获取表名和列名吗

示例:我知道数据库中的某个表有一个包含ID=1125412的字段

是否有方法在数据库上运行全局查询,以获取此数据所在的列名和表名


如果您知道一个列名,并且希望知道该列名所属的表名,那么这是否可行?

这是超级讨厌,但它会起作用:

-- Finding all tables with an ID column
SELECT SCHEMA_NAME(T.schema_id) SchemaName,
       T.name TableName
INTO #FoundTables
FROM sys.tables T INNER JOIN
     sys.columns C ON T.object_id = C.object_id
WHERE C.name = 'ID';

DECLARE @SchemaName NVarChar(100),
        @TableName NVarChar(100),
        @SQL NVarChar(2000);
-- Dynamically build a SELECT statement
WHILE (EXISTS (SELECT * FROM #FoundTables)) BEGIN
  SELECT TOP 1 @SchemaName = SchemaName, @TableName = TableName,
    @SQL = 'SELECT * FROM $SchemaName.$TableName WHERE ID = 1125412;'
  FROM #FoundTables;

  SELECT @SQL =
    REPLACE(REPLACE(@SQL, '$SchemaName', @SchemaName), '$TableName', @TableName);
  EXEC (@SQL);

  DELETE FROM #FoundTables
  WHERE SchemaName = @SchemaName
    AND TableName = @TableName;
END;

DROP TABLE #FoundTables;

我使用以下查询:

SELECT  sys.sysobjects.id, 
    sys.sysobjects.name AS TableName, 
    sys.syscolumns.colid, 
    sys.syscolumns.name AS ColumnName, 
    sys.systypes.name AS DataType, 
    sys.syscolumns.isnullable AS AllowNull
FROM sys.syscolumns LEFT OUTER JOIN
    sys.systypes ON sys.syscolumns.xtype = sys.systypes.xtype 
    RIGHT OUTER JOIN sys.sysobjects ON sys.syscolumns.id = sys.sysobjects.id
WHERE (sys.sysobjects.xtype = 'U') AND (sys.systypes.name <> 'sysname')
ORDER BY TableName, sys.syscolumns.colid
选择sys.sysobjects.id,
sys.sysobjects.name作为表名,
sys.syscolumns.colid,
sys.syscolumns.name作为ColumnName,
sys.systypes.name作为数据类型,
sys.syscolumns.isnullable为AllowNull
从sys.syscolumns左外部联接
sys.syscolumns.xtype=sys.systypes.xtype上的sys.systypes
右外部连接sys.syscolumns.id=sys.sysobjects.id上的sys.sysobjects
其中(sys.sysobjects.xtype='U')和(sys.systypes.name'sysname')
按表名排序,sys.syscolumns.colid

您是说在某个地方存储了一个等于1125412的整数,但您不知道列或表名?我感觉你需要一个光标来完成这个。。。你为什么需要这样做?你可以使用第三方工具,比如(免费的)Redgate SQL搜索,或者查看@Matthew PK:Joe说他知道列名(ID)。他不能查询一个系统表以获取所有包含一个名为ID的列的表,然后循环遍历这些表,可能会像您建议的那样使用游标。不过这可能会很难看。@DOK:呵呵——这正是我刚才写的。“肯定很难看。@马丁·史密斯:SQL搜索不会告诉他哪个列有他要查找的数据。SQL搜索将允许他在数据库中搜索给定的表、列、进程、视图等,其名称或文本包含某些值,但不会像Joe所希望的那样搜索数据。@Adrian:哈哈,是的。假设此代码不会投入生产并用于定位一次性数据输入错误:)确实很难看,但您必须做您必须做的;)+1+1,应该注意,这是光标适用的少数几种情况之一:D