3

我對如何在MS SQL服務器中確定默認數據庫架構感到困惑。存儲過程中DROP和SELECT INTO的默認架構

我有以下存儲過程作爲一個最小工作示例:

CREATE PROCEDURE [dbo].[SampleSP] 
AS 

SELECT 'HI' as [SampleColumn] 
INTO [SampleTable] 

DROP TABLE [SampleTable] 

所有測試使用的是用戶使用User驗證的Windows具有相同名稱的默認數據庫架構MS SQL服務器上執行。

  • 當我執行的MS SQL Server 2005安裝該SP表創建爲[User].[SampleTable]DROP TABLE失敗Invalid object name 'SampleTable'(在兼容模式下80,即Server 2000中運行)(我假設,因爲它看起來[dbo].[SampleTable]
  • 當我DROP TABLE [SampleTable]在一個單獨的查詢它的工作
  • 當我執行的MS SQL Server 2008 R2(也運行在COMPAT。80)表被創建爲[dbo].[SampleTable]和下跌沒有錯誤的SP

我發現this回答描述存儲過程中的查找,但它沒有提及該上下文中的用戶默認值,即使它在2005年使用。也許有人知道這是如何更改以及是否可以將新版本配置爲表現方式相同。

+3

節省你自己的麻煩,並養成在程序和其他t-sql代碼中始終使用模式的習慣。從長遠來看,這將爲您節省很多問題。 –

+0

我和你一直在使用模式。但是我目前正在遷移一些遺留代碼,並試圖衡量一些舊存儲過程的行爲變化的(非)影響。 – Oliver

回答

0

這聽起來像你只需要爲用戶的默認架構設置爲DBO:

ALTER USER YourUser WITH DEFAULT_SCHEMA = dbo; 

這樣,它被設置在用戶級別,你將不需要改變任何代碼。