Прокрутите несколько таблиц, чтобы увидеть, существует ли столбец? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть временная таблица, в которой содержится список имен таблиц, которые мне нужно пройти по этим таблицам, чтобы проверить, существует ли этот столбец.Если нет, то распечатайте таблицу, где ее нет

Пока у меня есть

CREATE TABLE #ListOfTables (
   [TableName] varchar(max)
)
INSERT INTO #ListOfTables
   ([TableName])
  (SELECT TableName from dbo.CustomTableAttributes)

-- Statement
DECLARE @stm nvarchar(max)
SET @stm = N''

IF EXISTS(SELECT 1 FROM sys.columns 
          WHERE Name = N'BegDt'
 Errors Here --> AND Object_ID = Object_ID(N''+ ***Select [TableName] FROM #ListOfTables*** +''))

Begin
'Do Work here'
End

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Пожалуйста, попробуйте что-то вроде этого

Exist:

SELECT table_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name in (SELECT TableName from dbo.CustomTableAttributes)
    AND column_name = 'BegDt'

не существует:

SELECT TableName from dbo.CustomTableAttributes
Except    
SELECT table_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name in (SELECT TableName from dbo.CustomTableAttributes)
    AND column_name = 'BegDt'
1 голос
/ 14 марта 2019

Это должно вернуть все таблицы, у которых нет столбца в таблице с именем 'ID'. Просто измените «ID» на то, что вам нужно.

SELECT * 
FROM sys.tables TBL
-- this reverses the logic and returns all tables that do not exist in the below list
WHERE TBL.object_id NOT IN (
    -- this selects all the tables that have that column in the table structure
    SELECT TBL.object_id
    FROM sys.tables TBL
    INNER JOIN sys.columns COL ON TBL.object_id = col.object_id
    WHERE col.name = 'ID'
)
...