代码如下:
create procedure khrepotr(@v_startdate datetime,@v_enddate datetime,@v_deptname varchar,@v_AssessmentTemplate varchar)
as
declare @sql nvarchar(4000)
begin
set @sql = 'select a.deptName,a.OutsourcingName,a.AssessmentTemplate '
select @sql = @sql + ' , max(case assessmentitem when ''' + assessmentitem + ''' then b.realrecord end) [' + assessmentitem + ']'
from (select distinct b.assessmentitem
from tb_cttsp_daiwCompanyConsequence a , tb_cttsp_daiwCompanyRelation b
where a.id=b.parentId) as a
set @sql = @sql + ',a.total from tb_cttsp_daiwCompanyConsequence a , tb_cttsp_daiwCompanyRelation b
where a.id=b.parentId
and a.AssessmentDate between @v_startdate
and @v_enddate and a.deptName=@v_deptname
and a.AssessmentTemplate=@v_AssessmentTemplate
group by a.deptName,a.OutsourcingName,a.AssessmentTemplate,a.total'
EXEC sp_executesql @sql,N'@v_startdate datetime',@v_startdate,N'@v_enddate datetime',@v_enddate,N'@v_deptname varchar',@v_deptname,N'@v_AssessmentTemplate varchar',@v_AssessmentTemplate
end
执行
exec khrepotr @v_startdate='2014-01-01',@v_enddate='2014-10-01',@v_deptname='中国铁通广州分公司',@v_AssessmentTemplate='A类集客家宽'
执行提示错误,求解。
消息 137,级别 15,状态 2,第 4 行
必须声明标量变量 "@v_enddate"。
------解决思路----------------------
先不说别的,红字部分就容易出问题,不加括号的值默认只有1,不够存放
CREATE PROCEDURE khrepotr
(
@v_startdate DATETIME ,
@v_enddate DATETIME ,
@v_deptname VARCHAR(10) ,
@v_AssessmentTemplate VARCHAR(10)
)
AS
DECLARE @sql NVARCHAR(4000)
BEGIN
SET @sql = 'select a.deptName,a.OutsourcingName,a.AssessmentTemplate '
SELECT @sql = @sql + ' , max(case assessmentitem when '''
+ assessmentitem + ''' then b.realrecord end) ['
+ assessmentitem + ']'
FROM ( SELECT DISTINCT
b.assessmentitem
FROM tb_cttsp_daiwCompanyConsequence a ,
tb_cttsp_daiwCompanyRelation b
WHERE a.id = b.parentId
) AS a
SET @sql = @sql
+ ',a.total from tb_cttsp_daiwCompanyConsequence a , tb_cttsp_daiwCompanyRelation b
where a.id=b.parentId
and a.AssessmentDate between @v_startdate
and @v_enddate and a.deptName=@v_deptname
and a.AssessmentTemplate=@v_AssessmentTemplate
group by a.deptName,a.OutsourcingName,a.AssessmentTemplate,a.total'
EXEC sp_executesql @sql, N'@v_startdate datetime', @v_startdate,
N'@v_enddate datetime', @v_enddate, N'@v_deptname varchar',
@v_deptname, N'@v_AssessmentTemplate varchar',
@v_AssessmentTemplate
END
------解决思路----------------------
sp_executesql 不是这么玩的哦。
EXEC sp_executesql @sql,
N'@v_startdate datetime ,@v_enddate datetime,@v_deptname varchar(max),@v_AssessmentTemplate varchar'(max)', @v_startdate, @v_enddate, @v_deptname, @v_AssessmentTemplate
------解决思路----------------------