【问题标题】:SQL Server how to create a view in a specific database on a remote serverSQL Server 如何在远程服务器上的特定数据库中创建视图
【发布时间】:2017-01-20 19:25:00
【问题描述】:

我正在编写动态 SQL 语句来在特定数据库中的远程服务器上创建视图。我生成的 SQL 语句在主数据库上执行。如果我在 CREATE VIEW 语句中使用 3 部分命名约定,则无济于事。

--QUERY
SELECT 
    'IF OBJECT_ID(N'''+ ss.name +'.view_' + so.name + ''') IS NULL
        EXECUTE (''CREATE VIEW ' + ss.name + '.view_' + so.name + ' AS SELECT * FROM REMOTEDATABASE.' + ss.name + '.' + so.name + ''') AT [REMOTESERVER]' 
   FROM sys.objects so
   JOIN sys.schemas ss
     ON so.[schema_id] = ss.[schema_id] 
  WHERE so.[type] = 'U';

--Query Result
IF OBJECT_ID(N'dbo.view_Test') IS NULL 
    EXECUTE ('CREATE VIEW dbo.view_Test AS SELECT * FROM REMOTEDATABASE.dbo.Test') AT [REMOTESERVER]

【问题讨论】:

  • 无论答案是什么,它都会在 SQL 2016 SP1 中过时——新命令——CREATE OR ALTER VIEW <viewname>。见blogs.msdn.microsoft.com/sqlserverstorageengine/2016/11/17/…
  • 在视图中使用 * 不是一个好主意。如果表结构发生变化,您的视图将不会自行更新以包含新列。如果在视图中添加了一个新列而另一个删除了值,则更令人困惑的是可以移动列。
  • 你得到什么错误?
  • @Sean Lange:我没有使用 SELECT *,我只是将它用于 deomostration。 Xedni:如果我包含 USE CREATE VIEW 我得到 create view 应该是批处理错误中的唯一语句。

标签: sql-server tsql sql-server-2012


【解决方案1】:

要在远程服务器上的特定数据库中创建视图,请尝试以下操作:

EXECUTE ('USE YourDatabase EXEC(''CREATE VIEW YourView AS SELECT 1 AS SomeColumn'')') AT YourRemoteServer

【讨论】:

  • 这是对一个有用的、罕见的问题的有用的硬答案。这值得 1000 个赞,而不是内连接和左连接之间的区别。
【解决方案2】:

以下对我有用:

USE YourDatabaseName  

GO  

CREATE VIEW [ViewName]  
AS  
SELECT 1                        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多