我试图只在视图存在时才执行语法。这是我的代码,但是它一直强调一行说必须声明变量@vn - 但是我不是在上面的行中声明它?
进一步了解,#tbl_views是一个导入的电子表格,其中包含所有可能视图的列表,视图可能存在也可能不存在。我想在查询之前检查视图是否存在,因此if语句。
Declare @vn varchar(MAX)
--More stuff here
while @count > 0
set @vn = (select top 1 viewname from #tbl_views)
IF EXISTS (SELECT * FROM @vn)
BEGIN
--if view exists, let's query it.
--if the view does not skip it and move on to the next
END
set @count = @count - 1
编辑--- 这不再像我上面的代码那样产生编译错误,但是如何检查与我运行查询的服务器不同的服务器上的视图?例如,此查询在superfly上运行,我需要查看leonardo上是否存在该视图
IF EXISTS(select * FROM sys.views where name = @vn)
编辑#2。编辑#2
使用此语法 - 是的,它们是链接服务器连接
IF EXISTS(SELECT * FROM leonardo.production.sys.views where name = @vn)
产生此错误:
Msg 7314,Level 16,State 1,Line 321 OLE DB提供程序" SQLNCLI10"对于链接服务器" leonardo"才不是 包含表""制作"。" sys"。"观看""。表也是如此 不存在或当前用户没有该表的权限。
答案 0 :(得分:0)
您的设置@vn = ( select top 1 viewname from #tbl_views)
从我对你的问题的理解以及对SQL的理解。您的查询顶部必须包含以下代码:
DECLARE
@vn datatype
SET @vn = ( select top 1 viewname from #tbl_views)
您也可以尝试:
DECLARE
@vn datatype = ( select top 1 viewname from #tbl_views)
希望有所帮助!
答案 1 :(得分:0)
试试IF (@vn IS NOT NULL)
。 SELECT * @vn
无效SQL。