首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在T脚本中创建视图

在T脚本中创建视图
EN

Stack Overflow用户
提问于 2013-03-14 16:35:51
回答 2查看 2.8K关注 0票数 3

我们正在运行Server 2008 R2并创建一个归档函数,该函数将创建一个新数据库(稍后可以脱机并存储在其他地方),然后将数据从主数据库中取出并放入新数据库,最后在主数据库中创建一个视图来查看新表中的归档数据。

我有创建DB的脚本,在新DB中创建归档表,从主DB复制记录并将它们放到归档DB中,并从主DB中删除记录。现在,我正在尝试编写一个视图的创建脚本:

代码语言:javascript
复制
declare @sql varchar(8000)
set @sql = 'create view [' + @srcdb + '].[dbo].[vw_artrans] as 
            select * from [' + @srcdb + '].[dbo].artrans
            union
            select * from [' + @archdb + '].[dbo].artrans'
exec (@sql)

但是不能传递数据库的名称来创建视图。

所以我试了一下:

代码语言:javascript
复制
declare @sql varchar(8000)
set @sql = 'use ' + @srcdb + ' 
            go
            create view [vw_artrans] as 
            select * from [' + @srcdb + '].[dbo].artrans
            union
            select * from [' + @archdb + '].[dbo].artrans'
exec (@sql)

但是它现在抱怨GO语句(不正确的语法)。

为归档数据创建的数据库名称是在脚本中动态确定的(@archdb包含名称),因此我不能在DB名称中编写脚本,也不能运行第二个脚本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-14 17:21:16

基于@Sebastien的答案,以下是解决方案:

代码语言:javascript
复制
declare @sql varchar(8000)

set @sql = 'EXEC ' + @srcdb + '.sys.sp_executesql N''create view [vw_artrans] as 
            select * from [' + @srcdb + '].[dbo].artrans
            union
            select * from [' + @archdb + '].[dbo].artrans'';'

exec (@sql)
票数 5
EN

Stack Overflow用户

发布于 2013-03-14 17:05:01

要在与您所在的数据库不同的数据库中执行动态SQL语句,可以使用如下所示的sp_executesql:

代码语言:javascript
复制
USE db1;
EXEC db2.sys.sp_executesql N'SELECT DB_NAME();';

这将导致返回db2。

GO不是T语句.SSMS解释它将查询文本分解为批处理。它永远不会发送到Server本身。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15415044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档