2010-09-17 12 views
6

我已經做了SP內部的運行查詢的exec()執行時運行查詢內SP和使用EXEC()我exceuting的SP內的查詢,但在創建SP當我收到錯誤面向「缺省模式不存在」的錯誤。使用

The default schema does not exist. 

的SP是:

CREATE PROCEDURE MySP 
    @tableName varchar(100) 

AS 
BEGIN 
    SET NOCOUNT ON; 

declare @selectQuery varchar(MAX) 

set @selectQuery = 'select * from ' + @tableName 

exec(@selectQuery) 

end 

好心幫

回答

14

使用CREATE PROCEDURE dbo.MySP

您登錄因爲必須有一個不存在的默認模式的用戶。你

DEFAULT_SCHEMA can be set to a schema that does not currently exist in the database.

也應該使用quotename(@tableName)和參數類型的sysname而不是varchar(100)避免SQL注入或非標準對象名稱只是錯誤。

+0

謝謝...這是問題所在。使用dbo.spname後問題解決了。 :) – HotTester 2010-09-17 08:24:31

+0

有關sql注入的好處。在安全性和速度方面使用動態查詢時,還有其他事情應該記住嗎? – HotTester 2010-09-17 08:26:02

+2

是的。請參閱[動態SQL的詛咒和祝福 - 處理動態表和列名稱](http://www.sommarskog.se/dynamic_sql.html#objectnames) – 2010-09-17 08:28:32

2

這可能是因爲用戶在創建SP不再關聯的默認模式存在,或者用戶不再能夠訪問到架構。

雖然,我以爲SQL Server默認爲dbo模式。也許試圖限定Stored Proc的模式。

e.g

Create Procedure dbo.MySP

+0

我在創建SP本身時出現錯誤。 – HotTester 2010-09-17 08:17:52

+0

@HotTester - 抱歉誤讀你的問題。我已更新我的回答 – codingbadger 2010-09-17 08:24:03

+0

+1 ...謝謝你的回覆 – HotTester 2010-09-17 08:26:52

4

你可以改變你的默認模式:

ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo] 
GO 

則避免了必須包括[DBO]。在創建過程中

+0

謝謝。我遇到了針對蔚藍數據庫運行腳本的問題。我正在安裝umbraco cms到Azure託管平臺上,獲取「默認模式不存在」... – Kieran 2016-04-17 05:51:52