如何在SQL Server 2005的用户定义函数中使用truncate table并插入表中?

时间:2011-10-18 16:22:20

标签: sql-server-2005

我正在尝试在SQL Server 2005中使用一个简单的函数,它会生成错误。

CREATE FUNCTION [dbo].[fn_data_stat_cc_update]
(
  @result char
)
RETURNS char(1)
AS
  BEGIN
    truncate table stg_data_cancer_center;

    INSERT INTO stg_data_cancer_center(
            mrn, pt_city, pt_state, pt_zip, pt_pri_dx, clinic, source
    SELECT rtrim(ltrim(mrn)) as mrn,
    pat_city, pat_state, zipcode, exact_icd9_code_pri_dx, 'clinic' =
    case
        when inst_id = 1 then 'CANRAD'
        when inst_id = 2 then 'CANHAM'
        else @result--''
    end, 'MOSAIQ' as Source
    from stg_mosaiq_patient;

     RETURN LTRIM(RTRIM(@result)) 
  END

错误是:

Procedure fn_data_stat_cc_update, Line 18
Invalid use of side-effecting or time-dependent operator in 'TRUNCATE TABLE' within a function.
Procedure fn_data_stat_cc_update, Line 25
Invalid use of side-effecting or time-dependent operator in 'INSERT' within a function.

1 个答案:

答案 0 :(得分:3)

你不能。

您需要使用存储过程。不允许函数产生副作用,例如修改数据。