Если вам просто нужно имя таблицы, вы можете запустить:
select object_name(object_id) from sys.columns
where name like '%received_at%'
Если вам также нужно имя схемы (что во многих случаях вам понадобится, поскольку у вас будет много разных схем, и если вы не сможете запомнить каждую таблицу в базе данных и ее принадлежность, это может быть полезно ) пробег:
select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'
и, наконец, если вы хотите получить его в более хорошем формате (хотя здесь код (на мой взгляд) становится слишком сложным для простого написания):
select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'
обратите внимание, вы также можете создать функцию, основанную на том, что у меня есть:
CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO
Стоит отметить, что функция concat была добавлена в 2012 году. Для 2008r2 и более ранних версий используется + для объединения строк.
Я немного переформатировал процесс, так как опубликовал это. Теперь он немного более продвинутый, но выглядит намного более запутанным (но он в процессе, так что вы никогда его не увидите) и лучше отформатирован.
Эта версия позволяет вам иметь ее в административной базе данных, а затем искать в любой базе данных. Измените decleration на @db
с 'master'
на то, что вы хотите, чтобы база данных по умолчанию была (ПРИМЕЧАНИЕ: использование функции CONCAT () будет работать только с 2012+, если вы не измените сцепление строк для использования операторов +
).
CREATE PROCEDURE [dbo].[usp_tablecheck]
--Scan through all tables to identify all tables in the specified database with columns that have the provided string
--Stephen B
@name nvarchar(200)
,@db nvarchar(200) = 'master'
AS
DECLARE @sql nvarchar(4000) = CONCAT('
SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
,col.name AS [Column]
FROM ',@db,'.sys.columns col
LEFT JOIN ',@db,'.sys.objects ob
ON ob.object_id = col.object_id
WHERE
col.name LIKE CONCAT(''%'',''',@name,''',''%'')
AND ob.type =''U''
ORDER BY [Table Name] ASC
,[Column] ASC')
EXECUTE (@sql)
GO