为sql查询设置默认架构

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之前添加.

  • 这让我得到了我需要的答案。结果是,如果用户是 SysAdmin 固定服务器角色的成员,则默认架构将被忽略。它只是使用 dbo... (2认同)

mpo*_*llo 18

我不相信有"每个查询"的方式来做到这一点.(您可以使用use关键字指定数据库 - 而不是模式 - 但从技术上讲,这是一个单独的查询,因为您必须在go之后发出命令.)

请记住,在SQL Server中,完全限定的表名格式为:

[数据库].[模式] [表]

在SQL Server Management Studio中,您可以配置所询问的所有默认值.

  • 您可以database基于每个用户(或在您的连接字符串中)设置默认值:

    安全性>登录>(右键单击)用户>属性>常规

  • 您可以schema基于每个用户设置默认值(但我不相信您可以在连接字符串中配置它,但如果您使用dbo它始终是默认值):

    安全性>登录>(右键单击)用户>属性>用户映射>默认架构

简而言之,如果您使用的dbo是架构,那么您可能会遇到最少的麻烦.


Cul*_*lme 8

很老的问题,但由于谷歌把我带到这里,我将添加一个我认为有用的解决方案:

步骤 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