从链接服务器数据库获取视图列表

时间:2015-06-03 20:16:19

标签: sql-server-2008

我试图只在视图存在时才执行语法。这是我的代码,但是它一直强调一行说必须声明变量@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"。"观看""。表也​​是如此   不存在或当前用户没有该表的权限。

2 个答案:

答案 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。