是否可以使用表类型创建常规sql server表?
使用2008 R2,我创建了一个用户定义的表类型,如下所示是否可以使用表类型创建常规sql server表?,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,使用2008 R2,我创建了一个用户定义的表类型,如下所示 IF TYPE_ID('ttypRPStats') IS NOT NULL DROP TYPE dbo.ttypRPStats CREATE TYPE dbo.ttypRPStats AS TABLE ( RowNum INT NOT NULL IDENTITY (1,1) PRIMARY KEY CLUSTERED , RP_Name VAR
IF TYPE_ID('ttypRPStats') IS NOT NULL
DROP TYPE dbo.ttypRPStats
CREATE TYPE dbo.ttypRPStats AS TABLE
(
RowNum INT NOT NULL IDENTITY (1,1) PRIMARY KEY CLUSTERED
, RP_Name VARCHAR(100)
, RPQualified_Name VARCHAR(200)
, RP_Type VARCHAR(100)
, RPCreatedDate DATETIME
, RPLast_ModifiedDate DATETIME
, RPActive BIT NOT NULL DEFAULT 0
)
GO
表变量的声明和使用工作正常:
DECLARE @RPStats dbo.ttypRPStats
INSERT INTO @RPStats
(
RP_Name
, RPQualified_Name
, RP_Type
, RPCreatedDate
, RPLast_ModifiedDate
, RPActive
)
VALUES
(
'Name' -- RP_Name
, 'Longer.Name' -- RPQualified_Name
, 'TheirType' -- RP_Type
, '2004/07/04' -- RPCreatedDate
, '2013/05/01' -- RPLast_ModifiedDate
, 1 -- RPActive
)
select * from @RPStats
但我希望能够使用表类型创建一个“真实”表。我已经阅读并重新阅读了CREATETABLE命令定义,但没有检测到这样做的方法;并且已经进行了大量的研究,但是还没有发现有效的语法。例如,以下构造不起作用:
CREATE TABLE RPStats AS ttypRPStats
CREATE TABLE RPStats (ttypRPStats)
是否有使用表类型创建表的有效语法
我知道我可以先将它全部发送到一个表变量,然后选择。。。进入“真正的”表格,
但这将是不可取的最后选择
感谢您的时间。我不知道有什么方法可以直接执行此操作,但考虑到您的“最后手段”想法,您是否考虑过这样做:1)从类型创建表变量,2)尚未加载任何数据,3)从@TableVariable选择*到reatable,4)将数据加载到reatable?我没有尝试过,但怀疑即使是空表变量也会提供一个结果集结构,SELECT…INTO构造将使用该结构创建一个空表。如果数据只加载一次,这是否可以接受?如果是这样的话,我可以把它作为一个答案发布(当然,假设它有效;-)我测试过,它复制了身份,但没有默认或索引/PK。所以并不理想。我猜可以创建一个proc来读取类型的结构并从中创建一个表。我会看看我是否能拼凑一些东西。事实上,这是可能的,但并不简单,所以我需要一两天的时间,因为我现在没有时间完成它。如果您很快需要它,您可以运行SQL Profiler,然后在SSMS中,将表类型脚本化为CREATE,以查看它正在运行什么样的SQL,然后进行模拟。@srutzky——在处理任何数据之前,先创建不动产表的好主意。这让我得到了我想要的90%…谢谢你的帮助。也许我可以利用类型定义并使用dSQL创建表。我下一步就试试,没问题。是的,我已经开始编写动态SQL来获取基于类型定义的CREATE语句,但这是我说的有点棘手的部分,特别是如果您想要支持所有各种数据类型,包括用户定义的类型。然后就有了约束(Check/Unique/PK/Default),每个约束都有自己的定义;-)。如果我今天晚些时候有时间,我会努力完成它并把它作为答案发布。