2012-05-18 50 views
1

我试图创建一个简单的存储过程,但得到一个奇怪的错误。我是服务器上的系统管理员。创建存储过程SQL Server错误

当我运行下面的代码,我得到这个错误

消息15151,级别16,状态1,第1行
无法找到对象“保”,因为它不存在,或者你做不是 有权限。该语句已终止。

我可以在dbo模式中创建过程,然后将其转移到模式中。我已经在2008年的几个不同的安装(R1 & R2)上尝试了这一点,它有时可以工作,而且大多数情况下不会。

有没有人有任何建议?谢谢保罗。

if not exists (Select * from sys.schemas Where name = 'Test') 
    Exec ('Create Schema Test Authorization dbo') 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Test].[Paul]') AND type in (N'P', N'PC')) 
    DROP PROCEDURE [Test].[Paul] 
GO 

Create Procedure Test.Paul 
As 
    Select @@ServerName 
GO 

Create Procedure dbo.[Paul] 
As 
    Select @@ServerName 
GO 

Alter Schema Test Transfer dbo.Paul 

exec Test.Paul1 

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'Test') 
    DROP SCHEMA [Test] 
GO 
+2

哪一行是错误?因为我看到Alter Schema Test Transfer dbo.Paul应该失败,因为Procedure Test.Paul已经创建 – Diego

+0

对不起,我试图证明第一个创建语句失败,但我然后能够执行dbo模式中的第二个,然后将其转移到正确的模式(测试)。因此运行每段代码并检查错误。 – SPE109

+1

我得到:#消息15530,级别16,状态1,行1 名称为“Paul”的对象已经存在.''上面的'Alter Schema Test Transfer dbo.Paul'存储在'Test.Paul' proc已经存在... –

回答

0

SPE109,检查是否可以改变现有的Test.Paul sp。请验证登录用户的更改/删除权限。

使用下面的语句将权限授予

GRANT EXEC ON some_sp TO uname-- Grant permission on a single procedure. 
GRANT EXEC ON SCHEMA::dbo TO uname -- Grant perpmission on all procedures in 
             the dbo schema 

GRANT CREATE TABLE TO uname 

GRANT ALTER ON SCHEMA::dbo TO uname 

现在尝试删除的SP

+0

[测试]是模式名称而不是数据库名称。因此,您的代码会尝试在称为test的数据库中创建过程,但将过程置于dbo模式中。 – SPE109

+0

将程序转移到测试模式后,我生成了drop和create脚本,但失败。我通过添加一个新的列来改变程序。我对SQL实例拥有完整的系统管理员权限,因此有权做我需要的一切。 – SPE109

0

对不起,浪费你的时间家伙,似乎有人已经把在数据库级别触发器,它不处理与Schema的正确。所以这是引发错误而不是创建过程。

感谢您的帮助和建议。 保罗。

+0

是的,那些嵌套错误将得到亚! – Charleh