Как найти имя связанной таблицы / представления для оператора from, используя значение в SQL Server - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть таблица X в SQL Server, которая включает столбец с именем Type varchar(10) с 15 потенциальными значениями: AAA, BBB1, BBB2, CCC, ... и другой столбец с именем IfExists bit.

В одной и той же БД у меня есть 15 различных представлений, представление для каждого Type, включая X_ID. Примеры имен представлений:

View_ReportingAAA
View_ReportingBBB1
View_ReportingBBB2
View_ReportingCCC
....

Обычно я смотрю Type записи, используя X_ID, предоставленный мне в Table X, и использую запрос на выборку для связанного представления, чтобы получить некоторые данные.

Теперь мне нужно создать триггер для Table X, чтобы установить 1 для значения поля IfExists, если в связанном представлении есть запись для идентификатора записи X_ID.

Мой вопрос: Каков наилучший способ найти и использовать имя связанного представления для этой цели, используя значение поля в основной таблице?

Я использую код ниже для этого, но я не уверен, что это самый эффективный способ справиться с этим. Буду признателен за любую помощь или совет.

declare @ifExists int = 0;
declare @sql nvarchar(max) = 'set @ifExists = (Select count(*) from View_Reporting';

declare @tablename nvarchar(max) = (Select Type from X where X_ID = @X_ID)

set @sql = @sql + @tablename + ' where V_xid = @X_ID)';
EXECUTE sp_executesql @sql

if (@ifExists > 0)
begin
   update X set IfExists = 1 where X_ID = @X_ID
end

1 Ответ

0 голосов
/ 25 ноября 2018

Может быть, это может быть проще:

declare @ifExists bit
select @ifExists=count(*) from INFORMATION_SCHEMA.VIEWS
    where TABLE_NAME='View_Reporting'+(select [Type] from X where X_ID=@X_ID)
update X set IfExists=@IfExists where X_ID=@X_ID and IfExists<>@IfExists
...