gpt4 book ai didi

sql - 为什么创建表时需要架构而不是查询表时需要架构 - SQL Server

转载 作者:行者123 更新时间:2023-12-03 05:16:40 24 4
gpt4 key购买 nike

我是 MS SQL 服务器的新手。我们的客户为我们提供了一个 SQL Server 数据库,并且他们为该数据库配置了服务主体身份验证。因此,我使用我的客户公司帐户登录到数据库,然后尝试创建一个表而不提供任何模式名称。例如

CREATE TABLE visits (
visit_id INT PRIMARY KEY IDENTITY (1, 1),
first_name VARCHAR (50) NOT NULL,
last_name VARCHAR (50) NOT NULL,
visited_at DATETIME,
phone VARCHAR(20),
store_id INT NOT NULL,
);

因此,当我运行此查询时,它给出了以下错误

Msg 2760, Level 16, State 1, Line 1
The specified schema name "aashay.amballi@<company>.com" either does not exist or you do not have permission to use it.

现在,当我使用 DBO 架构创建表时,它就创建了该表。

CREATE TABLE dbo.visits (
visit_id INT PRIMARY KEY IDENTITY (1, 1),
first_name VARCHAR (50) NOT NULL,
last_name VARCHAR (50) NOT NULL,
visited_at DATETIME,
phone VARCHAR(20),
store_id INT NOT NULL,
);

现在,当我尝试在没有任何模式(即 DBO)的情况下查询此访问表时 select * from attempts 它实际上给了我结果。

此外,当我运行 select SCHEMA_NAME() 来检查默认架构是什么时,它返回 null。那么,当没有为用户设置默认模式并且创建没有模式名称的表时,是否有可能会出现该错误?如果是这种情况,那么在没有任何模式的情况下进行查询时,默认情况下如何选择 dbo 模式?

所以我对它是如何工作的有点困惑。谁能解释一下吗?

这个问题是关于我几天前在尝试将 MSSQL 与服务主体身份验证与 Django 框架集成时提出的问题 - Django MigrationSchemaMissing exception on Azure SQL using service principal auth

最佳答案

来自CREATE TABLE description :

If type_schema_name isn't specified, the SQL Server Database Enginereferences type_name in the following order:

  • The SQL Server system data type.
  • The default schema of the current user in the current database.
  • The dbo schema in the current database.

您的默认架构是什么?这取决于 CREATE USER statement 的选项创建用户帐户时使用:

WITH DEFAULT_SCHEMA = schema_name Specifies the first schema that willbe searched by the server when it resolves the names of objects forthis database user.

您可以在查询中跳过架构,但最佳实践是 always use schemas .

关于sql - 为什么创建表时需要架构而不是查询表时需要架构 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74767672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com