例如,这是我的ID:07E485
我需要在所有表格中找到此ID
所有可能带有此值的列都是字符串类型...
类似于:select * from **alltables** where **anyColumn**='07E485'
答案 0 :(得分:0)
以下查询将返回名称中包含yourDBName
的数据库07E485
中的所有表。
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND
TABLE_CATALOG = 'yourDBName' AND
TABLE_NAME LIKE '%07E485%'
如果我误读了您的要求,而您希望在任何数据库中找到精确命名为07E485
的所有表,那么您可以使用以下查询:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND
TABLE_NAME = '07E485'
答案 1 :(得分:0)
在每个数据库中,您都有一个名为INFORMATION_SCHEMA.COLUMNS的视图,您可以使用此视图查询所有表。
这就是我做的方式,如果有人知道更好的方式,感觉自由......:)
SET NOCOUNT ON
DECLARE @Table varchar(255), @Schema varchar(255), @SQL varchar(MAX)
DECLARE table_cursor CURSOR FOR
SELECT TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS -- This is a system view where you can see all columns of a database.
WHERE UPPER(COLUMN_NAME) = 'ID' -- This makes sure you don't loop through any tables that don't have a Column called 'ID'.
OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @Table, @Schema
WHILE @@FETCH_STATUS = 0 BEGIN
-- This part creates your queries.
SET @SQL = 'SELECT * FROM '+@Schema+'.'+@Table+'
WHERE CAST(ID as varchar) = ''07E485''' -- Casting ID to varchar to avoid data type errors.
-- This executes the query.
EXEC(@SQL)
-- If a result is found, i.e. ID is equal to '07E485' somewhere in the table, Table name is printed on the "Messages" tab.
IF @@ROWCOUNT > 0 PRINT @Table
FETCH NEXT FROM table_cursor INTO @Table, @Schema
END
CLOSE table_cursor
DEALLOCATE table_cursor
要查看哪些表包含id ='07E485',请转到“消息”,您将看到它们的列表。
答案 2 :(得分:0)
尝试这样:如果动态SQL等于给定的搜索字符串,则会检查所有字符串类型的列。您可能希望向输出中添加更多数据类型,以便更好地查看表格的行。但是不能简单地放置DECLARE @DateVal DATETIME = '2016-08-12 13:57:15.347'
SELECT CAST(@DateVal AS FLOAT) -- 42592,5814276235
DECLARE @FloatVal FLOAT = 42592.5814276235
SELECT CAST(@FloatVal AS DATETIME) -- 2016-08-12 13:57:15.347
,因为没有额外的努力,XML中不允许存在数据类型。
其次,通过使用SELECT *
,我可以避免由于带有空格的列或表名而导致语法错误...
QUOTENAME