我有代码:
SELECT Date
,trafficsource
INTO #temp
FROM SomeTable;
这是第一步。第二步是以下代码:
INSERT INTO dbo.DimTrafficSource ( TrafficSource, LogInsert )
SELECT DISTINCT fact.trafficSource
,GETDATE()
FROM #temp fact
LEFT JOIN dbo.DimTrafficSource dim ON fact.trafficSource = dim.TrafficSource
WHERE dim.TrafficSource IS NULL
现在,第二步用于许多其他存储过程。为了避免在其中使用相同的“hardcoded
”代码,我宁愿用其他函数/存储过程替换此功能,所以当我想修改逻辑时,我想在一个地方修改它,而不是在每个存储过程使用此代码。是否可以使用临时表?怎么样?
答案 0 :(得分:0)
是的,你可以。如果您从本地切换到global temp table(##而不是#),它将对您创建的所有SP可用。下面的例子证明了这一点。
但我会建议您切换到常规表。临时表很难调试和跟踪。当它们存在/不存在时,并不总是显而易见的。
实施例
/* Temp procedure 1 creates a
* global temp table.
*/
CREATE PROCEDURE #Temp1 AS
BEGIN
SELECT
1 AS x
INTO
##tempT
;
END
GO
/* Temp procedure 2
* can access the temp table..
*/
CREATE PROCEDURE #Temp2 AS
BEGIN
SELECT
x
FROM
##tempT
;
END
GO
/* Excecuting the SPs
* show the temp table is shared.
*/
EXECUTE #Temp1;
EXECUTE #Temp2;