为SQL查询设置默认模式
有没有办法为查询设置模式,以便在查询的其余部分中,我可以仅仅通过名称来引用表,而不必在模式名前添加它们?
例如,我想要做这样的事情:
Use [schemaName] select * from [tableName]
而不是这个:
select * from [schemaName].[tableName]
一个快速的谷歌把我指向这个页面 。 它解释了从sql server 2005开始,你可以用ALTER USER语句设置用户的默认模式。 不幸的是,这意味着你永久地改变它,所以如果你需要在模式之间切换,每次执行存储过程或一批语句时都需要设置它。 或者,你可以使用这里描述的技术。
如果您使用的是SQL Server 2000或更早版本,则此页面将解释用户和模式是相同的。 如果不用schema \ user预先指定表名,sql server将首先查看当前用户拥有的表,然后查看dbo拥有的表来parsing表名。 看起来,对于所有其他表,您必须预先安排架构\用户。
我不相信有一个“每查询”的方式来做到这一点。 (您可以使用use
关键字来指定数据库 – 而不是模式 – 但是从技术上讲,这是一个单独的查询,因为之后您必须发出go
命令。)
请记住,在SQL服务器中,完全限定的表名格式为:
[数据库]。[模式] [表]
在SQL Server Management Studio中,您可以configuration您所要求的所有默认值。
-
您可以基于每个用户(或连接string)设置默认
database
:安全>login>(右键单击)用户>属性>常规
-
你可以在每个用户的基础上设置默认
schema
(但我不相信你可以在你的连接string中进行configuration,但是如果你使用默认的dbo
):安全>login>(右键单击)用户>属性>用户映射>默认架构
简而言之,如果您使用dbo
作为您的模式,您可能会有最less的头痛。
当我需要很多表名时,我有时候会这样做,只是从INFORMATION_SCHEMA系统表中获取它们的模式:value
select TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in (*select your table names*)
dynamic添加模式的另一种方法,或者如果你想把它改成别的东西
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))
如果是nvarchar或varchar,则不需要转换@ID
执行(@SQL)
尝试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