【问题标题】:Creating Views on a Sybase ASE database from a stored procedure on a different database on the same server?从同一服务器上不同数据库上的存储过程在 Sybase ASE 数据库上创建视图?
【发布时间】:2014-09-09 19:23:40
【问题描述】:

我正在尝试使用存储过程从第二个数据库创建一个数据库视图。如果我在目标数据库上运行它,我可以使用下面的 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

【问题讨论】:

  • 更改您在 DB1 中的 SP 以调用 DB2 中的 SP,然后创建视图?
  • 问题是它是一个 UAT 数据库,整个数据库被删除并被包括所有 SP 的 PROD 实例覆盖。然后我想将视图添加到 UAT 实例。
  • 有趣,我正在运行 ASE 15.5,它不允许我在存储过程中创建视图。

标签: sql stored-procedures views sybase sap-ase


【解决方案1】:

创建如下存储过程并放入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

然后切换你的起始数据库,在我的例子中是 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 上测试的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多