用户定义的数据类型和#temp表

时间:2016-08-10 16:05:37

标签: sql-server sql-server-2008

在SQL Server 2008数据库中,我有一个用户定义的数据类型。在其中一个存储过程中,我将使用该类型作为临时表的列类型,如:

CREATE TABLE #SomeTable
(
    [some_column] UDT_SomeType,
    -- other columns 
)

显然我的尝试失败了,因为就我用Google搜索而言,UDT_SomeType tempdb中不存在{临时表实际存储的地方)。

UDT_SomeType实际上是NUMERIC(19,9),因此我现在可以使用以下解决方法:

CREATE TABLE #SomeTable
(
    [some_column] NUMERIC(19,9),
    -- others columns  
)

但是,我不认为这是一个非常好的解决方案。有什么样的最佳实践可以在这里应用吗?

2 个答案:

答案 0 :(得分:1)

重要信息:

此解决方法绝不应在任何SP或结构化查询中使用;它的唯一用途应限于受保护环境中的临时查询,以避免任何可能的缺陷。编写它只是为了证明在特殊情况下可以在临时表中使用UDT。感谢@Marcel(见评论)指出了它。

不幸的是不是很简单,但是你可以使用一些脚本,我会保留一个小脚本来创建所有需要的类型,以便在必要时启动。

辅助脚本:

USE [tempdb]
GO
CREATE TYPE [UDT_SomeType] FROM NUMERIC(19,9)
GO

普通脚本:

USE [YOURDB]
GO

CREATE TABLE #SomeTable
(
    [some_column] UDT_SomeType,
    -- other columns 
)

答案 1 :(得分:0)

我认为快速回答是使用表变量而不是临时表。