Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 用户定义的数据类型和#临时表_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 用户定义的数据类型和#临时表

Sql server 用户定义的数据类型和#临时表,sql-server,sql-server-2008,Sql Server,Sql Server 2008,在SQLServer2008数据库中,我有一个用户定义的数据类型。在一个存储过程中,我将使用该类型作为临时表的列类型,如: CREATE TABLE #SomeTable ( [some_column] UDT_SomeType, -- other columns ) 显然,我的尝试失败了,因为就我谷歌搜索而言,我的UDT\u SomeType不存在于tempdb(temp表实际存储的地方) UDT\u SomeType实际上是NUMERIC(19,9),因此我现在可以使用以

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

CREATE TABLE #SomeTable
(
    [some_column] UDT_SomeType,
    -- other columns 
)
显然,我的尝试失败了,因为就我谷歌搜索而言,我的
UDT\u SomeType
不存在于
tempdb
(temp表实际存储的地方)

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

CREATE TABLE #SomeTable
(
    [some_column] NUMERIC(19,9),
    -- others columns  
)
然而,我不认为这是一个真正好的解决方案。这里有什么可以应用的最佳实践吗?

重要信息:

此解决方法不应用于任何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 
)

看看这里:@KamilG我知道这是可行的,但是temp表还有其他列。因此,只有在我定义一个新表时,才能应用您提供的解决方案-type@Artem您觉得有什么有用的解决方案吗?这是一个很好的解决方法。使用这种方法的努力是最低限度的。这种解决方法有几个缺点。首先,它不是可重入的。当代码的不同实例同时运行时,不定义创建UDT的实例。其次,编写UDT的本地类型明确地引出了UDT背后的荒谬概念。这违反了干燥原则。@Marcel你完全正确。在我的辩护中,我只能说我忘了提到,当我使用此解决方案时,只是运行一些临时查询,从未想过将其放入任何SP中。再次阅读此问题,我发现提到了SP,因此我将编辑我的答案,并提出一个大的警告。谢谢你指出这一点