我正在尝试使用存储过程从第二个数据库创建数据库视图。如果我在目标数据库上运行它,我可以用下面的SQL创建存储过程:
IF OBJECT_ID ('databasename..v_MyView') IS NOT NULL
DROP VIEW v_MyView
GO
CREATE VIEW v_MyView
AS
select FirstName, LastName, Address
from databasename..t_UserTable
where SalesPersonId = 21563
GO
我希望我能在这行前加上:
CREATE VIEW v_MyView
使用:
CREATE VIEW databasename..v_MyView
然后从同一服务器上的第二个数据库的存储过程内部调用它,但这不起作用。
来自DBViz的错误是:
16:26:28 [CREATE - 0 row(s), 0.000 secs] [Error Code: 166, SQL State: S1000] CREATE VIEW does not allow specifying the database name as a prefix to the object name.
...执行了1条语句,0行受影响,执行/获取时间:0.000 / 0.000秒[0成功,0警告,1错误]
请提出任何想法或建议吗?
ASE 15.0,用于MS SQL Server和Sybase的jTDS Type 4 JDBC驱动程序,1.2.7
答案 0 :(得分:3)
创建以下存储过程并将其放在sybsystemprocs中:
create procedure sp_user_create_view
@a_view_name varchar(255),
@a_view_query varchar(16000)
as
begin
if object_id(@a_view_name) is not null
begin
exec ('drop view ' + @a_view_name)
end
exec ('create view ' + @a_view_name + ' as ' + @a_view_query)
end
go
grant execute on sp_user_create_view to <user/group/role as appropriate>
go
然后在我的case testdb中切换你的起始数据库并执行:
use testdb
go
exec tempdb..sp_user_create_view object_name, 'select name from sysobjects'
go
这将在tempdb中创建视图'object_name'。
use tempdb
go
set rowcount 5
go
select * from object_name
go
name
----------------
object_name
sysalternates
sysattributes
syscolumns
syscomments
(5 rows affected)
set rowcount 0
go
这是在Sybase ASE 15.7上测试的