积极答复者
有没有如何查询含有字段为y,y的值是x的所有表名的sql语句?

问题
答案
-
时间的明显取决于满足条件的表数量和数据量,跟方法无关,无法控制
USE 你的库名; DECLARE @sql nvarchar(4000); DECLARE @t TABLE(name nvarchar(760)); DECLARE CUR CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR SELECT 'SELECT N''' + REPLACE(obj, N'''', N'''''') + N' WHERE EXISTS( SELECT * FROM ' + obj + N' WITH(NOLOCK) WHERE ' + QUOTENAME(name) + N' = ''x'' -- 是否有包含 x 值的字段 );' FROM( -- 包含 k 字段的表 SELECT name, obj = QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(OBJECT_NAME(object_id)) FROM sys.columns WHERE name = 'k' ) DATA ; OPEN CUR; WHILE 1 = 1 BEGIN; FETCH CUR INTO @sql; IF NOT @@FETCH_STATUS = 0 BREAK; INSERT @t EXEC(@sql); END; CLOSE CUR; DEALLOCATE CUR; SELECT * FROM @t;
全部回复
-
时间的明显取决于满足条件的表数量和数据量,跟方法无关,无法控制
USE 你的库名; DECLARE @sql nvarchar(4000); DECLARE @t TABLE(name nvarchar(760)); DECLARE CUR CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR SELECT 'SELECT N''' + REPLACE(obj, N'''', N'''''') + N' WHERE EXISTS( SELECT * FROM ' + obj + N' WITH(NOLOCK) WHERE ' + QUOTENAME(name) + N' = ''x'' -- 是否有包含 x 值的字段 );' FROM( -- 包含 k 字段的表 SELECT name, obj = QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(OBJECT_NAME(object_id)) FROM sys.columns WHERE name = 'k' ) DATA ; OPEN CUR; WHILE 1 = 1 BEGIN; FETCH CUR INTO @sql; IF NOT @@FETCH_STATUS = 0 BREAK; INSERT @t EXEC(@sql); END; CLOSE CUR; DEALLOCATE CUR; SELECT * FROM @t;