【发布时间】:2018-03-14 06:21:37
【问题描述】:
ALTER PROCEDURE combined_report_generation
AS
BEGIN
create table temp(id int identity(1,1),form_id varchar(50),process_id varchar(50),active_status int);
insert into temp(form_id,process_id,active_status) select form_id,process_id,active_status from audit_form_active;
DECLARE @MAXID INT, @Counter INT,@FI varchar(50),@PI varchar(50),@match varchar(50),@tablename varchar(100),@match_col varchar(50)
SET @COUNTER = 2
SELECT @MAXID = COUNT(*) FROM temp where active_status=1
WHILE (@COUNTER <= @MAXID)
BEGIN
SELECT @FI=form_id FROM temp where id=@COUNTER
SELECT @PI=process_id FROM temp where id=@COUNTER
SELECT @match=cdr_match_col FROM mapping_table where process_id=(select process_id FROM temp where id=@COUNTER)
SET @match_col='cdr_'+@match
SET @tablename='AUDITFORM_'+@FI
INSERT INTO combined_report
(
[audit_id]
,[form_id]
,[audit_score]
,[scorable_value]
,[scoring_value]
,[UniqueColumnMappingCdr]
,[crm_AgentId]
,[crm_AgentName]
,[voice_record_id]
,[fatal_count]
,[fatal_status]
,[agent_disposition]
,[agent_disposition_status]
,[updated_status]
,[TeamLeader]
,[calibration_call]
,[sample_to]
,[created_by]
,[agent_disposition_date]
,[Audit_Start_Time]
,[created_on]
,[updated_by]
,[updated_on]
)
EXEC('
SELECT
[audit_id]
,[form_id]
,[audit_score]
,[scorable_value]
,[scoring_value]
,'+@match_col+'
,[crm_AgentId]
,[crm_AgentName]
,[voice_record_id]
,[fatal_count]
,[fatal_status]
,[agent_disposition]
,[agent_disposition_status]
,[updated_status]
,[TeamLeader]
,[calibration_call]
,[sample_to]
,[created_by]
,[agent_disposition_date]
,[Audit_Start_Time]
,[created_on]
,[updated_by]
,[updated_on]
FROM '+@tablename+'where cast(updated_on as datetime) >(select MAX(cast(updated_on as datetime)) from combined_report)')
SET @COUNTER=@COUNTER+1
END
DROP table temp
END
------
我收到此错误,我使用的是 sql server 2012 “updated_on”不是公认的表提示选项。如果它打算作为表值函数或 CHANGETABLE 函数的参数,请确保您的数据库兼容模式设置为 90。
alter database database_name set compatibility_level=90
【问题讨论】:
-
您有多个
AUDITFORM_的表仅由表单的ID 分隔,这意味着您的数据模型已损坏。由于您已经将 form_id 作为这些表中的列,您只需将所有这些表合并到一个AUDITFORMS表中,从而无需动态 sql。
标签: sql sql-server tsql stored-procedures