2012-05-18 224 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