为什么创建用户定义的 Table 类型需要 "USE"?

Why is "USE" required for creating User-Defined Table Types?

要创建 table,您可以这样做:

CREATE TABLE [MY_DB].[dbo].[MY_TABLE] (
   [MY_MESSAGE] varchar(255)
);

或者这个:

USE [MY_DB]
CREATE TABLE [dbo].[MY_TABLE] (
   [MY_MESSAGE] varchar(255)
);

我试图用这种方式创建用户定义的 table 类型:

CREATE TYPE [MY_DB].[dbo].[udtMY_TABLE] AS TABLE (
   [MY_MESSAGE] varchar(255)
);

我收到以下错误:

The type name contains more than the maximum number of prefixes. The maximum is 1.

简单的修复,我刚刚做了这个并且工作正常:

USE [MY_DB]
CREATE TYPE [dbo].[udtMY_TABLE] AS TABLE (
   [MY_MESSAGE] varchar(255)
);

问题是:为什么创建这种类型需要在此处明确使用 USE 而不是仅允许 [MY_DB].[dbo].[udtMY_TABLE]

直到现在我都认为 USE 只是一个 space 的保护程序,避免了每次都输入数据库名称的需要。但是这里的这种行为让我想知道它是否还有其他目的。

如您所说 - 这就是它的工作原理。从 docs 我们有 CREATE TYPE:

Creates an alias data type or a user-defined type in the current database in SQL Server or Azure SQL Database.

而且语法非常清晰:

-- User-defined Data Type Syntax    
CREATE TYPE [ schema_name. ] type_name ...

而对于 tables 我们有:

--Disk-Based CREATE TABLE Syntax CREATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }

可能是因为 user-defined table 类型不能跨数据库共享。您可以查看 a kind of workaround using CLR.

的答案