为什么创建用户定义的表类型需要“ USE”?

时间:2019-05-21 13:55:03

标签: sql-server tsql sql-server-2008

要创建表,您可以执行以下操作:

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

或者这个:

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

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

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只是一个节省空间的方法,因此无需每次都键入数据库名称。但是由于这种行为,让我怀疑它是否还有其他用途。

1 个答案:

答案 0 :(得分:1)

正如您所说-这就是它的工作原理。在docs中,我们得到了CREATE TYPE

  

在当前目录中创建别名数据类型或用户定义的类型   SQL Server或Azure SQL数据库中的数据库

语法非常清楚:

-- 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 }

这也许是因为不能在数据库之间共享用户定义的表类型。您可以检查这个答案是否为a kind of workaround using CLR