在T-SQL中使用参数化名称和表名称创建视图

时间:2019-04-30 20:35:29

标签: sql-server stored-procedures

你好,我想创建一个输入创建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 :(得分:0)

您需要使用dynamic 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,所以我删除了它,但是由于您想要的代码可能无法使用它,因此您需要弄清楚这一点(也许是两个存储过程)。另外,最好在动态SQL中使用QUOTENAME函数,而不要将方括号放在字符串中。

已经有很多关于动态sql的文章,所以我不需要在这里添加更多细节。坦率地说,这可能是一个XY问题,并且可能有比您尝试做的事更好的方式来做您想做的事,但这答案将您的问题视为学术问题。