如何保存CREATE VIEW语句?

时间:2016-08-10 21:34:44

标签: sql sql-server tsql

编辑:此问题基于错误的前提,即当创建它们的用户从服务器断开连接时,SQL VIEWS已从数据库中清除。留下这个问题,以防其他人有这个假设。

我试图在我的数据库中使用视图,但是我遇到了无法将代码保存为SQL Server对象以供重复使用的问题。

我尝试将CREATE VIEW语句保存为过程和用户​​定义的函数,但是由于许多人已经回答堆栈溢出,CREATE PROCEDURECREATE FUNCTIONCREATE VIEW不兼容,因为只有一个批次发行。

显然,我不想每次都重新输入我的CREATE VIEW语句,而且我不想从文本文件中加载它们。我必须在这里遗漏一些东西。

2 个答案:

答案 0 :(得分:2)

你真的没有"保存" CREATE / ALTER语句。 create或alter语句更改数据库的结构。稍后您可以通过右键单击视图并选择Script as-> Create来再次使用SSMS生成语句。这将检查数据库的结构并生成语句。

此方法的问题是您的数据库现在包含结构定义(DDL)及其内容(数据)。如果删除/创建数据库以清除其数据,您也会丢失结构。因此,您始终需要一个数据库悬挂在该结构上并进行备份以确保您不会丢失DDL。

我个人会将Database Projects用作Visual Studio和SQL Server数据工具的一部分。这允许您将每个视图,表等保存为单独的文件,然后使用模式比较更新数据库。主要的好处是,您可以将数据库的定义与数据库本身分开,还可以源代码控制或备份DDL文件。

答案 1 :(得分:1)

如果你真的想,你可以在这样的过程中创建一个视图:

CREATE PROCEDURE uspCreateView AS 
  EXEC('CREATE VIEW...  ')

但是,您必须使用''

在视图代码中转义单引号

但是,我必须同意其他评论,这似乎是一件奇怪的事情。

其他一些想法:

您可以使用sp_helptext获取现有视图的代码:

sp_helptext '<your view name here>'

此外,INFORMATION_SCHEMA.VIEWS包含一个具有相同代码的VIEW_DEFINITION列:

SELECT * FROM INFORMATION_SCHEMA.VIEWS