表视图组
NO_induk | Gaji_bulan
-----------------------
200012 | 012017
200012 | 022017
200012 | 122017
200006 | 012017
200006 | 022017
200006 | 122017
2000AA | 012017
2000AA | 022017
2000AA | 122017
ALTER PROCEDURE [dbo].[prcgroup]
@no_induk1 nvarchar(50),
@no_induk2 nvarchar(50),
@bulan1 nvarchar(6),
@bulan2 nvarchar(6)
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SELECT @cols = @cols + QUOTENAME(gaji_bulan) + ',' FROM (select distinct gaji_bulan from tblgaji_detail ) as tmp order by gaji_bulan
select @cols = substring(@cols, 0, len(@cols))
set @query =
'SELECT * from
(
select no_induk,nama_pelamar,kodept,namapt,kodetp,ket, nilai_ahir, gaji_bulan from View_group where
no_induk>='+@no_induk1+' and no_induk<='+@no_induk2+'
and gaji_bulan>='+@bulan1+' and gaji_bulan<='+@bulan2+'
) src
pivot
(
max(nilai_ahir) for gaji_bulan in (' + @cols + ')
) piv'
execute(@query)
END
如果我执行这样的过程,它将运行良好:
exec prcgroup '200006','200006','012017','122017'
如果执行这样的操作,我会遇到问题:
exec prcgroup '200006','2000AA','012017','122017'
错误 消息245,第16级,状态1,第1行 将nvarchar值'2000AA'转换为数据类型int时,转换失败。
我希望它像这样运行:
prcgroup '200006','2000AA','012017','122017'
答案 0 :(得分:0)
您正在比较字符串,因此必须由SingleQuote('
)装饰。因此,在达到>=
条件之后,您必须使用'''+@no_induk2+'''
而不是'+@no_induk2+'
。
如下更新查询:
set @query =
'SELECT * from
(
select no_induk,nama_pelamar,kodept,namapt,kodetp,ket, nilai_ahir, gaji_bulan from View_group where
no_induk>='''+@no_induk1+''' and no_induk<='''+@no_induk2+'''
and gaji_bulan>='''+@bulan1+''' and gaji_bulan<='''+@bulan2+'''
) src
pivot
(
max(nilai_ahir) for gaji_bulan in (''' + @cols + ''')
) piv'