当前位置: 代码迷 >> Sql Server >> 讯息 137,级别 15,状态 2,第 2 行 必须声明标量变量 "@sql2"
  详细解决方案

讯息 137,级别 15,状态 2,第 2 行 必须声明标量变量 "@sql2"

热度:434   发布时间:2016-04-27 10:42:34.0
消息 137,级别 15,状态 2,第 2 行 必须声明标量变量 "@sql2"。
declare @sql2 varchar(8000)
 set @sql2 = 'select cp.corpname, dt.deptname,
pbc.pname, pc.duty,pc.pcl, pbc.pk_psnbasdoc '  
select @[email protected]+',sum(case cz.corsename when '''+corsename+''' then ge.score else 0 end) [' + corsename + ']'
from (select corsename from psncorse ) as a 
set @sql2 = @sql2 +' from psnbasdoc pbc 
join psndoc pc on pbc.pk_psnbasdoc=pc.pk_psnbasdoc
join dept dt on pc.pk_dept=dt.pk_dept
join corp cp on dt.pk_corp=cp.pk_corp
join psnscore ge on pc.pk_psndoc=ge.pk_psndoc
join psncorse cz on cz.pk_psncorse=ge.pk_psncorse
group by cp.corpname, dt.deptname,
pbc.pname, pc.duty,pc.pcl ,pbc.pk_psnbasdoc'
 
 exec @sql2
请问是哪里出错了啊 还有如何用这个语句来创建一个试图?

------解决方案--------------------
你的exec是有问题,但是那个报错不是这个问题,先把psncorse 表结构给出来看看
------解决方案--------------------
SQL code
--先把上面的内容加到存储过程再--创建视图:IF OBJECT_ID('v_test') IS NOT NULL    DROP VIEW v_testGOCREATE VIEW v_testASSELECT * FROM OPENROWSET(         'sqloledb',          'Trusted_Connection=yes', --此处可用'uid=sa;pwd=123' (SQL认证的方式来代替)         'SET FMTONLY OFF;  --注意:要加上此选项          EXEC MYDB..p_test --         '     )GOselect * from v_test
  相关解决方案