在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
)
但是,我不认为这是一个非常好的解决方案。有什么样的最佳实践可以在这里应用吗?
答案 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)
我认为快速回答是使用表变量而不是临时表。