我有一个非常长的查询,因此为了可读起见,将其一分为二。
Select field_1, field_2
from table
into #temp;
和
Select field_1, field_2, field_1b
from #temp TMP
Inner Join table_2 ON TMP.field_2b = field_2
在SQL Server Management Studio中很好用。
现在,我需要做一份将这些数据加载到另一个数据库的工作。我有一些进出口向导项目,可以正常工作。
在这种情况下,我无法使向导正常工作,它在#temp上引发错误。
我尝试了
set fmtonly off
但是我超时了(超时值设置为0)
关于如何进行这项工作的任何想法,我的最后一个资源是从两个查询中进行一个查询,但是如果可能的话,希望保持一定的顺序和可读性。
谢谢!
答案 0 :(得分:1)
如果仅出于可读性考虑将查询分为两个部分,则可以使用其他方式格式化查询,例如CTE:
WITH t1 AS (
SELECT field_1, field_2
FROM table
)
SELECT t1.field_1, t1.field_2, table_2.field_1b
FROM t1
INNER JOIN table_2 ON t1.field_2 = table_2.field_2b;
虽然我无法开始推测性能(因为我对您的实际查询或基础架构一无所知),但这也可能会提高性能,因为它消除了填充临时表的开销。通常,您不应仅仅为了使查询“可读”而损害性能。
答案 1 :(得分:1)
首先,请发布错误消息。这通常是一个问题最启发性的一点,它可以使其他人帮助您。
由于您使用的是SSIS,请复制/粘贴在“输出”窗口中打印的内容?这就是您的错误消息的去处。
几点
fmtonly的用途完全不同,因此,如果fmtonly on / off之间的差异是您是否获得标头或标头和数据。请参阅以下带有fmtonly文档的链接:
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-fmtonly-transact-sql?view=sql-server-2017
您是否尝试过替代临时表解决方案?这似乎是最有可能的罪魁祸首。这里有一些替代方法:
尽管没有错误消息,我还有其他要点可以帮助您。
答案 2 :(得分:0)
当您不发布如何将数据加载到另一个数据库时,这很难确定问题
但是我建议您使用半永久性的Temp表。
因此,您在作业开始时创建实际表,并在作业完成后删除所述表。请记住,您可以在工作中执行多个步骤,而不必在同一查询中。