Sql server 用户定义的数据类型和#临时表
在SQLServer2008数据库中,我有一个用户定义的数据类型。在一个存储过程中,我将使用该类型作为临时表的列类型,如: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),因此我现在可以使用以
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,因此我将编辑我的答案,并提出一个大的警告。谢谢你指出这一点