是否有方法可以爲查詢設置模式,以便在查詢的其餘部分中,我可以僅通過名稱引用表,而不必將它們與模式名稱相提並論?爲SQL查詢設置默認模式
舉例來說,我願做這樣的事情:
Use [schemaName]
select * from [tableName]
與此相反:
select * from [schemaName].[tableName]
是否有方法可以爲查詢設置模式,以便在查詢的其餘部分中,我可以僅通過名稱引用表,而不必將它們與模式名稱相提並論?爲SQL查詢設置默認模式
舉例來說,我願做這樣的事情:
Use [schemaName]
select * from [tableName]
與此相反:
select * from [schemaName].[tableName]
快速谷歌指向我this page。它解釋了從sql server 2005開始,你可以用ALTER USER語句設置用戶的默認模式。不幸的是,這意味着你永久地改變它,所以如果你需要在模式之間切換,每次執行一個存儲過程或一批語句時都需要設置它。或者,您可以使用描述爲here的技術。
如果您正在使用sql server 2000或更早版本this page說明用戶和模式是等價的。如果您不用schema \ user預先指定表名,則sql server將首先查看當前用戶擁有的表,然後查看dbo擁有的表以解析表名。看起來,對於所有其他表,您必須預先安排架構\用戶。
這就是我所追求的。謝謝。 – Chev 2011-02-10 15:26:30
這讓我想到了我需要的答案。事實證明,如果用戶是SysAdmin固定服務器角色的成員,則默認架構將被忽略。它只是使用dbo ... – ShaneBlake 2015-05-27 13:31:35
我不相信有一個「每次查詢」的方式來做到這一點。 (您可以使用use
關鍵字指定數據庫 - 而不是模式 - 但這是技術上一個單獨的查詢,你必須事後發出go
命令。)
請記住,在SQL服務器的完全限定表名是格式:。
[數據庫] [方案] [表]
在SQL Server Management Studio中,您可以配置所有你問的默認值。
您可以設置默認database
在每個用戶的基礎上(或在您的連接字符串):
安全性>登錄>(右鍵)用戶>屬性>常規
您可以在每個用戶的基礎上設置默認schema
(但我不相信您可以在連接字符串中對其進行配置,但如果您使用始終爲默認值的dbo
):
安全性>登錄>(右鍵)用戶>屬性>用戶映射>默認架構
總之,如果你使用dbo
爲您的架構,你可能有至少頭痛的數量。
動態或如果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)
當我需要很多表名時,我有時會這樣做,只是從INFORMATION_SCHEMA系統表中獲取它們以及它們的模式: 值
select TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in
(*select your table names*)
嘗試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
指向您的數據庫名稱並選擇SQLMS中的新查詢。使用DBNAME;從[表名]中選擇*是正確的。 – Crimsonland 2011-02-09 06:58:47