2011-02-09 117 views
42

是否有方法可以爲查詢設置模式,以便在查詢的其餘部分中,我可以僅通過名稱引用表,而不必將它們與模式名稱相提並論?爲SQL查詢設置默認模式

舉例來說,我願做這樣的事情:

Use [schemaName] 
select * from [tableName] 

與此相反:

select * from [schemaName].[tableName] 
+1

指向您的數據庫名稱並選擇SQLMS中的新查詢。使用DBNAME;從[表名]中選擇*是正確的。 – Crimsonland 2011-02-09 06:58:47

回答

30

快速谷歌指向我this page。它解釋了從sql server 2005開始,你可以用ALTER USER語句設置用戶的默認模式。不幸的是,這意味着你永久地改變它,所以如果你需要在模式之間切換,每次執行一個存儲過程或一批語句時都需要設置它。或者,您可以使用描述爲here的技術。

如果您正在使用sql server 2000或更早版本this page說明用戶和模式是等價的。如果您不用schema \ user預先指定表名,則sql server將首先查看當前用戶擁有的表,然後查看dbo擁有的表以解析表名。看起來,對於所有其他表,您必須預先安排架構\用戶。

+0

這就是我所追求的。謝謝。 – Chev 2011-02-10 15:26:30

+0

這讓我想到了我需要的答案。事實證明,如果用戶是SysAdmin固定服務器角色的成員,則默認架構將被忽略。它只是使用dbo ... – ShaneBlake 2015-05-27 13:31:35

11

我不相信有一個「每次查詢」的方式來做到這一點。 (您可以使用use關鍵字指定數據庫 - 而不是模式 - 但這是技術上一個單獨的查詢,你必須事後發出go命令。)

請記住,在SQL服務器的完全限定表名是格式:。

[數據庫] [方案] [表]

在SQL Server Management Studio中,您可以配置所有你問的默認值。

  • 您可以設置默認database在每個用戶的基礎上(或在您的連接字符串):

    安全性>登錄>(右鍵)用戶>屬性>常規

  • 您可以在每個用戶的基礎上設置默認schema(但我不相信您可以在連接字符串中對其進行配置,但如果您使用始終爲默認值的dbo):

    安全性>登錄>(右鍵)用戶>屬性>用戶映射>默認架構

總之,如果你使用dbo爲您的架構,你可能有至少頭痛的數量。

0

動態或如果u增加模式的另一種方法想將其更改爲別的

DECLARE @schema AS VARCHAR(256) = 'dbo.' 
--User can also use SELECT SCHEMA_NAME() to get the default schema name 


DECLARE @ID INT 

declare @SQL nvarchar(max) = 'EXEC ' + @schema +'spSelectCaseBookingDetails @BookingID = ' + CAST(@ID AS NVARCHAR(10)) 

無需投@ID如果是爲nvarchar或varchar

執行(@SQL)

1

當我需要很多表名時,我有時會這樣做,只是從INFORMATION_SCHEMA系統表中獲取它們以及它們的模式: 值


select TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in 
(*select your table names*) 

-1

嘗試setuser。示例

declare @schema nvarchar (256) 
set @schema=(
    select top 1 TABLE_SCHEMA 
    from INFORMATION_SCHEMA.TABLES 
    where TABLE_NAME='MyTable' 
) 
if @schema<>'dbo' setuser @schema