Создать представление с параметризованным именем и именем таблицы в T-SQL - PullRequest
0 голосов
/ 30 апреля 2019

Здравствуйте, я хотел бы создать параметр, который будет вводить для создания представления SQL

IF OBJECT_ID('view_rhscir2_CiMobTrack1', 'V') IS NOT NULL
    DROP VIEW view_rhscir2_CiMobTrack1
GO
create view view_rhscir2_CiMobTrack1 as
select * from [dbo].[Form_RHSCIR2_CIMobilityTracking_1]
GO

желаемый код:

IF OBJECT_ID('@SQLLView', 'V') IS NOT NULL
    DROP VIEW @SQLLView
GO
create view @SQLLView as
select * from [dbo].[@SourceTable]
GO

1 Ответ

0 голосов
/ 01 мая 2019

Вам нужно использовать динамический sql .

Например:

DECLARE @sql varchar(max) = '
IF OBJECT_ID('''+@SQLLView+''', ''V'') IS NOT NULL
    DROP VIEW '+@SQLLView+'

create view '+@SQLLView+' as
select * from [dbo].['+@SourceTable+']
'

EXECUTE (@sql);

Есть много других соображений, которые вы найдете при изучении ссылки, которую я разместил,Например, вы не можете использовать GO в хранимой процедуре, поэтому я убрал это, но так как ваш желаемый код, вероятно, не будет работать без него, вам нужно это выяснить (возможно, две хранимые процедуры).Также лучше использовать функцию QUOTENAME в динамическом SQL вместо того, чтобы заключать в строку квадратные скобки.

Уже есть много статей о динамическом sql, поэтому мне не нужно добавлять здесь больше подробностей.Честно говоря, это, вероятно, проблема XY, и, вероятно, есть лучший способ сделать то, что вы хотите, чем то, что вы пытаетесь сделать, но этот ответ рассматривает ваш вопрос как академический.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...