要创建表,您可以执行以下操作:
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
只是一个节省空间的方法,因此无需每次都键入数据库名称。但是由于这种行为,让我怀疑它是否还有其他用途。
答案 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。