首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql错误。我使用过sql server 2012。

sql错误。我使用过sql server 2012。
EN

Stack Overflow用户
提问于 2018-03-14 14:21:38
回答 2查看 84关注 0票数 0
代码语言:javascript
复制
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 server2012 "updated_on“是一个无法识别的表提示选项。如果要将其用作表值函数或CHANGETABLE函数的参数,请确保将数据库兼容模式设置为90。

代码语言:javascript
复制
alter database database_name set compatibility_level=90
EN

回答 2

Stack Overflow用户

发布于 2018-03-14 15:13:54

你只需要在哪里之前留个空格

代码语言:javascript
复制
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)')
票数 1
EN

Stack Overflow用户

发布于 2018-03-14 19:02:18

执行动态SQL时,请确保对象和语句关键字之间有空格。您的表名正在与WHERE关键字合并,请在其间放一个空格。

此外,在使用列或表等动态对象名称时,请确保使用QUOTENAME()函数正确地对它们进行转义。您的动态值可能有一个需要用括号括起来的空格或奇怪的字符。

代码语言:javascript
复制
SET @match_col = QUOTENAME(@match_col)
SET @tablename = QUOTENAME(@tablename)

要进一步调试错误,可以尝试将动态SQL指定给变量,然后在PRINTEXEC之间切换

代码语言:javascript
复制
DECLARE @DynamicSQL VARCHAR(MAX) = 'SELECT ....'

-- Debug
PRINT (@DynamicSQL)

-- Run
EXEC (@DynamicSQL)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49270947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档