在SQL SERVER 数据库中如何根据一个字段名去查哪些表里有这个字段?

在SQL SERVER 数据库中如何根据一个字段名去查哪些表里有这个字段?,第1张

这个要结合两个表来进行查找一个是sysobjects一个是syscolumns。他们有个共同的字段是id来进行联系。查询的代码如下:\x0d\x0aSELECT * \x0d\x0aFROM sysobjects s\x0d\x0aWHERE \x0d\x0aTYPE='u'\x0d\x0aAND \x0d\x0aid IN(SELECT id \x0d\x0a FROM syscolumns s \x0d\x0a WHERE s.name='待查找字段名')

上处的字段名是指的表中的列名 还是指的 列中某一个 值。

如果是指的列名的话,很简单

select sysobjects.name as tablename,syscolumns.name as columnname

from syscolumns join sysobjects on sysobjects.id = syscolumns.id

where syscolumns.name like '%此处为列名%'

如果是指的一个值的话,要遍历数据库了。如下:

declare@str varchar(100)

set@str='张三'--要搜索的字符串

declare@s varchar(8000)

declaretb cursorlocalfor

selects='if exists(select 1 from ['+b.name+'] where convert(varchar,['+a.name+']) like ''%'+@str+'%'')

print ''select ['+a.name+'] from ['+b.name+']'''

fromsyscolumns a joinsysobjects b ona.id=b.id

whereb.xtype='U'anda.status>=0

--所查列的字段类型

anda.xusertype in(175,239,231,167,56,60,108,106)

opentb

fetchnextfromtb into@s

while @@fetch_status=0

begin

exec(@s)

fetchnextfromtb into@s

end

closetb

deallocatetb


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10800927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存