sqlserver 通过链接服务器创建视图提示对象名无效
来源:互联网 发布:枪炮与玫瑰乐队 知乎 编辑:程序博客网 时间:2024/06/05 01:53
背景:
1、创建的视图不在本机电脑上,而是在链接服务器上
2、创建的方式为命令方式
3、创建的命令是将SQL语句进行了拼接,然后在存储过程中执行
问题描述:
单独将SQL语句拉出来是可以正常创建视图的,但能过存储过程执行命令创建时,却提示“XXX对象名无效”。
在网上找了一下资料,大部分没什么参价值。但有一份资料却让我发出了此次的问题所在。
拼接的代码 如下: 参数说明 :@lineInfo 链接服务器名称 @Sql 是NVARCHAR(MAX)类型的数据,用以保存拼接的字符串。
-- 创建视图 set @Sql = N' exec sp_executesql N'''; set @Sql = @Sql + N'CREATE VIEW [dbo].[details]'; set @Sql = @Sql + N' AS'; set @Sql = @Sql + N' SELECT TOP (100) PERCENT CONVERT(char(10), A.Date, 120) AS 日期, A.XX , '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, CONVERT(varchar(10), '; set @Sql = @Sql + N' A.GETDATE(), 108) AS 现在时间, A.xx, '; set @Sql = @Sql + N' B.XX, B.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX'; set @Sql = @Sql + N' FROM dbo.Detail A LEFT OUTER JOIN'; set @Sql = @Sql + N' dbo.Style B ON A.XX= B.XXAND '; set @Sql = @Sql + N' A.XX= B.XX'; set @Sql = @Sql + N' WHERE (A.XX> 0)'; set @Sql = @Sql + N' UNION ALL'; set @Sql = @Sql + N' SELECT TOP (100) PERCENT CONVERT(char(10), A.Date, 120) AS 日期, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, B.XX, CONVERT(varchar(10), '; set @Sql = @Sql + N' A.GETDATE(), 108) AS 现在时间, ''''XX'''' AS XX, '; set @Sql = @Sql + N' cast(round(B.price * (1.0*A.Num/b.unit),2) as decimal(18,2)) AS XX, B.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX'; set @Sql = @Sql + N' FROM dbo.Manual A LEFT OUTER JOIN'; set @Sql = @Sql + N' dbo.List B ON A.XX= B.XXAND '; set @Sql = @Sql + N' A.XX= B.uuid'; set @Sql = @Sql + N' WHERE A.XX= 1'; set @Sql = @Sql + N' and (A.XX> 0)'; set @Sql = @Sql + N' ORDER BY XX, XX, XX, XX''';
问题原因:未明确指定数据库,因为是直接通过链接服务器远程执行的命令,所以它默认是在MASTER数据库下的,而在此数据库下,并没有创建视图所须要的表,所以会报 ‘对象名无效’的错误。
修改位置:
1:
set @Sql = N’ exec sp_executesql N”’;
改为:
set @Sql = N’ exec ‘+@lineInfo+’.dbManage.sys.sp_executesql N”’;
2:
set @Sql = @Sql + N’ FROM dbo.Detail A LEFT OUTER JOIN’;
set @Sql = @Sql + N’ dbo.Style B ON A.XX= B.XXAND ‘;
改为:
set @Sql = @Sql + N’ FROM dbManage.dbo.Manual A LEFT OUTER JOIN’;
set @Sql = @Sql + N’ dbManage.dbo.List B ON A.XX= B.XXAND ‘;
3:
set @Sql = @Sql + N’ FROM dbo.Manual A LEFT OUTER JOIN’;
set @Sql = @Sql + N’ dbo.List B ON A.XX= B.XXAND ‘;
改为:
set @Sql = @Sql + N’ FROM dbManage.dbo.Manual A LEFT OUTER JOIN’;
set @Sql = @Sql + N’ dbManage.dbo.List B ON A.XX= B.XXAND ‘;
修改完成后的代码如下:
-- 创建视图 set @Sql = N' exec '+@lineInfo+'.dbManage.sys.sp_executesql N'''; set @Sql = @Sql + N'CREATE VIEW [dbo].[details]'; set @Sql = @Sql + N' AS'; set @Sql = @Sql + N' SELECT TOP (100) PERCENT CONVERT(char(10), A.Date, 120) AS 日期, A.XX , '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, CONVERT(varchar(10), '; set @Sql = @Sql + N' A.GETDATE(), 108) AS 现在时间, A.xx, '; set @Sql = @Sql + N' B.XX, B.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX'; set @Sql = @Sql + N' FROM dbManage.dbo.Detail A LEFT OUTER JOIN'; set @Sql = @Sql + N' dbManage.dbo.Style B ON A.XX= B.XXAND '; set @Sql = @Sql + N' A.XX= B.XX'; set @Sql = @Sql + N' WHERE (A.XX> 0)'; set @Sql = @Sql + N' UNION ALL'; set @Sql = @Sql + N' SELECT TOP (100) PERCENT CONVERT(char(10), A.Date, 120) AS 日期, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX, B.XX, CONVERT(varchar(10), '; set @Sql = @Sql + N' A.GETDATE(), 108) AS 现在时间, ''''XX'''' AS XX, '; set @Sql = @Sql + N' cast(round(B.price * (1.0*A.Num/b.unit),2) as decimal(18,2)) AS XX, B.XX, '; set @Sql = @Sql + N' A.XX, A.XX, A.XX, '; set @Sql = @Sql + N' A.XX, A.XX'; set @Sql = @Sql + N' FROM dbManage.dbo.Manual A LEFT OUTER JOIN'; set @Sql = @Sql + N' dbManage.dbo.List B ON A.XX= B.XXAND '; set @Sql = @Sql + N' A.XX= B.uuid'; set @Sql = @Sql + N' WHERE A.XX= 1'; set @Sql = @Sql + N' and (A.XX> 0)'; set @Sql = @Sql + N' ORDER BY XX, XX, XX, XX''';
参考资料:http://jingyan.baidu.com/article/9989c7463bfa25f648ecfe2f.html?st=2&os=0&bd_page_type=1&net_type=1
- sqlserver 通过链接服务器创建视图提示对象名无效
- [SQLServer]对象名无效
- sqlserver添加数据的时候提示对象名‘updated’无效
- [SQLServer]对象名 'users' 无效。
- sqlserver 创建链接服务器
- SQLServer创建链接服务器
- java连接sqlserver数据库jdbc提示对象名无效问题的解决方法
- sqlserver中创建链接服务器
- SqlServer创建链接服务器(sp_addlinkedserver)
- 创建链接服务器 sqlserver dblink
- sqlserver创建mysql的链接建立视图
- Sqlserver通过链接服务器访问Oracle
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘xxx' 无效
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘xxx' 无效
- com.microsoft.sqlserver.jdbc.SQLServerException:对象名 ‘xx’ 无效
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'xxxxx' 无效
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘xxx' 无效
- druid数据源下 sqlserver 出现 对象名 'xxx' 无效
- 触摸事件,使用layout方法使View随手指的滑动而滑动
- java script 第三章
- Predix 命令行 CLI 简介
- 基于《PythonCookbook》的学习(4)—— 文本模式的匹配和查找
- webview显示网页
- sqlserver 通过链接服务器创建视图提示对象名无效
- Matplotlib Line2D设置
- 读漫谈架构
- 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程(2016-05-09)
- spring security登陆认证demo
- Ogre2.1 分析笔记(三)-场景图结构
- struts2实现简单action时间拦截器
- java集合框架
- 动态代理