在我的存储过程中,我使用#LocalTable
语法将数据插入到本地临时表(即SELECT INTO
)中。我目前没有为此表编写CREATE TABLE
命令。
我是否首选显式编写CREATE TABLE
命令并定义列架构?在没有定义架构的情况下使用方便的SELECT INTO
表有缺点吗?
答案 0 :(得分:5)
SELECT INTO的一些缺点:
您可能会对数据类型/长度/精度/比例感到惊讶。
您可以从源表中保留IDENTITY属性,但不总是(取决于源查询是否引用多个表)。
,对于代码的其他维护者来说,select into的存在可能更难以发现,并且它还迫使他们对代码进行反向工程以试图找出临时表的模式
一些优点:
你会变懒。
可能会出现稍微好一点的情况,但如果你以后要添加索引等,差异可以忽略不计(并且不能证明我在这一点上所说的其他一切)
答案 1 :(得分:0)
我不认为存在性能差异,但是当我必须为临时表创建索引时,我使用CREATE TABLE并定义列模式。通过大量数据,这种技术可以大大提高速度。
例如:
CREATE TABLE #tmpTable(ID int not null)
CREATE CLUSTERED INDEX Id_CI ON #tmpTable(ID ASC);
INSERT INTO #tmpTable
SELECT [....]
在使用它之前创建表会使代码更具可读性,但更加严格(这是我的意见)。
另一种方法是使用:
WITH tmpTable AS (
SELECT [...]
)
[Command on tmpTable]
END
我不熟悉SQL性能分析,知道什么解决方案更快或哪个解决方案使用的资源更少。
希望它有所帮助。