SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
WHERE COLUMN_NAME='Field'可以取出含有某一字段名的所有表名
再到各张表里去找啰。期待更简单的方法。
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
WHERE COLUMN_NAME='Field'可以取出含有某一字段名的所有表名
再到各张表里去找啰。期待更简单的方法。
where c.name='id'
~~~~你替换这个就是了, Column Name
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'Field'
你这方法不行,搜索到的表不全并且有重复表
TO: CoolSlob
只想列出表名,并不需要查询表
不好意思没看到你的补充,你与CoolSlob的方法一样均要显示查询表名,
能不能去除查询表?
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'id'
查到Master的两张表,dtproperties和sysconstraints,你是不是不想
要sysconstraints。如果这样的话,你可以试一下
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'id' AND TABLE_NAME IN
(SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE')
上面的例子中指定了TABLE_TYPE已解决了第一个问题,
额外问一下,TABLE_TYPE有哪几种类型?谢谢~ 第二个问题:
如何从搜索到的表中判断该字段是否已有某一值?
要用游标一个个去搜索吗 ? 有没有简洁的方法?
SELECT COUNT(*)
FROM 表名
WHERE 字段名=指定值
SELECT COUNT(*)
FROM 表名
WHERE 字段名=指定值
必须一个个表进行循环判断,能否对所有表一次性进行判断???
我的目的很简单,只需知道该字段名的指定值是否已启用,
至于在哪张表中启用或启用了几次并不重要
SELECT TOP 1 *
FROM 表名1,表名2...
WHERE 字段名=指定值这样的话会快一点。你也可以比较一下两者用的时间。
试试看,把结果告诉我,我还没试过。
SELECT TOP 1 *
FROM 表名1,表名2...
WHERE 字段名=指定值不能运行呀!
select top 1 公用的字段名
FROM 表名1,表名2...
WHERE 字段名=指定值
呢?用count(*)可能会很慢.
这样不行,会出现公用的字段名不明确,需指定属于哪张表
用循环也可以呀,说不定比count(*)快。
declare @columnname varchar(128)
declare @strsql varchar(8000)
set @columnname = 'yourcolumn'
set @strsql = 'select * from ('
select @strsql = @strsql + 'select ''' + rtrim(a.table_name) + ''' as tablename,count(*) as cnt from ' + rtrim(a.table_name) + ' where ' + @columnname + ' = 0 union '
from information_schema.columns a,information_schema.tables b
where a.table_name = b.table_name and b.table_type = 'BASE TABLE' and column_name = @columnnameset @strsql = left(@strsql,len(@strsql) - 5)set @strsql = @strsql + ') as a where a.cnt > 0'
exec(@strsql)如果你的具有指定字段的表太多,生成的strsql的语句太多,超过8000个字符,我就解决不了了。
楼上的思路同tonitu的一致,
但由于表的多少是不可知的,因此不能保证会不会超过8000个字符,
SQL中有没有一种数据类型可以存储比较多的字符??
from information_schema.columns a,information_schema.tables b
where a.table_name = b.table_name and b.table_type = 'BASE TABLE' and column_name = @columnname这语句能否分次写? 每次仅截取一定量的记录,如50条, 下一次再往下取50,如此循环,
这样的话能保证不会溢出