我想找出包含单词" VAP"的列。或取消。但问题是我们的服务器中有多个数据库。我想知道哪个数据库/表包含由这些单词组成的列名。如果有任何查询可用于从所有数据库中搜索列名,任何人都可以告诉我们吗?我尝试了以下查询,但它只能帮助从单个数据库中找到。
select distinct
t.name as TableName,
SCHEMA_NAME(t.schema_id) as TableSchema,
c.name as ColumnName,
ct.name as ColumnDataType,
c.is_nullable as IsNullable
from
sys.tables t with(nolock)
inner join
sys.columns c with(nolock) on t.object_id = c.object_id
inner join
sys.types ct with(nolock) on ct.system_type_id = c.system_type_id
where
c.name like '%VAP%'
order by
t.name
答案 0 :(得分:0)
如果您需要按名称查找数据库对象(例如表格,列,触发器) - 请查看名为SQL Search的免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。
对于任何DBA或数据库开发人员来说,这是一个非常必备的工具 - 我是否已经提到它绝对免费用于任何用途?
答案 1 :(得分:0)
我知道这有点冗长,但如果您不想使用任何第三方应用程序,可以使用此查询
USE [master]
GO
DECLARE @Search VARCHAR(50)='A',@SQL VARCHAR(MAX)
DECLARE @Min INT,@Max INT
DECLARE @Table TABLE
(
SeqNo INT IDENTITY(1,1),
DatabaseNm VARCHAR(255),
TableName VARCHAR(255),
ColumnName VARCHAR(255)
)
DECLARE @TEMP TABLE
(
SeqNo INT IDENTITY(1,1),
Qry VARCHAR(MAX)
)
INSERT INTO @TEMP
(
Qry
)
SELECT
Qry = 'SELECT
DbNm = '''+name+''',
TblNm = [TABLE_SCHEMA]+''.''+[TABLE_NAME],
COlNm = COLUMN_NAME
FROM ['+name+'].INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ''%'+ISNULL(@Search,'')+'%'''
FROM sys.databases
SELECT
@Min = MIN(SeqNo),
@Max = MAX(SeqNo)
FROM @TEMP
WHILE ISNULL(@Min,0)<=ISNULL(@Max,0)
BEGIN
SELECT
@SQL = Qry
FROM @TEMP
WHERE SeqNo = @Min
INSERT INTO @Table
(
DatabaseNm,
TableName,
ColumnName
)
EXEC(@SQL)
SELECT
@Min = ISNULL(@Min,0)+1
END
SELECT
*
FROM @Table
答案 2 :(得分:0)
使用sp_MSForeachdb获取详细信息。请尝试以下查询。
-------------------------
create table #temp
(dbname varchar(100),
tablename varchar(100)
)
EXECUTE master..sp_MSForeachdb '
USE [?]
IF ''?'' <> ''master'' AND ''?'' <> ''model'' AND ''?'' <> ''msdb'' AND ''?'' <> ''tempdb''
BEGIN
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.columns where COLUMN_NAME = ''VAP''))
BEGIN
insert into #temp
select ''?'',table_name FROM INFORMATION_SCHEMA.columns where COLUMN_NAME = ''VAP''
end
END
'
select * from #temp