Che*_*hev 61 sql sql-server schema
有没有办法为查询设置模式,以便在查询的其余部分中,我可以仅通过名称引用表而不用模式名称添加它们?
例如,我想做这样的事情:
Use [schemaName]
select * from [tableName]
Run Code Online (Sandbox Code Playgroud)
与此相反:
select * from [schemaName].[tableName]
Run Code Online (Sandbox Code Playgroud)
Sem*_*nen 36
一个快速的谷歌指向我这个页面.它解释了从sql server 2005开始,您可以使用ALTER USER语句设置用户的默认架构.不幸的是,这意味着您永久地更改它,因此如果您需要在模式之间切换,则需要在每次执行存储过程或一批语句时进行设置.或者,您可以使用此处描述的技术.
如果您使用的是sql server 2000或更早版本,则此页面会说明用户和模式是等效的.如果不在schema\user之前添加表名,sql server将首先查看当前用户拥有的表,然后查看dbo拥有的表以解析表名.似乎对于所有其他表,您必须在schema\user之前添加.
mpo*_*llo 18
我不相信有"每个查询"的方式来做到这一点.(您可以使用use
关键字指定数据库 - 而不是模式 - 但从技术上讲,这是一个单独的查询,因为您必须在go
之后发出命令.)
请记住,在SQL Server中,完全限定的表名格式为:
[数据库].[模式] [表]
在SQL Server Management Studio中,您可以配置所询问的所有默认值.
您可以database
基于每个用户(或在您的连接字符串中)设置默认值:
安全性>登录>(右键单击)用户>属性>常规
您可以schema
基于每个用户设置默认值(但我不相信您可以在连接字符串中配置它,但如果您使用dbo
它始终是默认值):
安全性>登录>(右键单击)用户>属性>用户映射>默认架构
简而言之,如果您使用的dbo
是架构,那么您可能会遇到最少的麻烦.
很老的问题,但由于谷歌把我带到这里,我将添加一个我认为有用的解决方案:
步骤 1. 为您需要能够使用的每个模式创建一个用户。例如“user_myschema”
步骤 2. 使用 EXECUTE AS 作为所需的架构用户执行 SQL 语句。
步骤 3. 使用 REVERT 切换回原始用户。
示例:假设您在架构“otherschema”中存在一个表“mytable”,这不是您的默认架构。运行“SELECT * FROM mytable”将不起作用。
创建一个名为“user_otherschema”的用户并将该用户的默认架构设置为“otherschema”。
现在您可以运行此脚本与表进行交互:
EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT
Run Code Online (Sandbox Code Playgroud)
revert 语句重置当前用户,所以你又是你自己。
EXECUTE AS 文档链接:https : //docs.microsoft.com/en-us/sql/t-sql/statements/execute-as-transact-sql? view = sql-server- 2017