用SP / UDF替换冗余代码

时间:2015-12-22 10:48:24

标签: sql-server tsql stored-procedures sql-server-2012

我有代码:

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”代码,我宁愿用其他函数/存储过程替换此功能,所以当我想修改逻辑时,我想在一个地方修改它,而不是在每个存储过程使用此代码。是否可以使用临时表?怎么样?

1 个答案:

答案 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;