转换nvarchar过程时,错误转换失败

时间:2018-10-22 09:39:59

标签: sql-server

表视图组

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'

1 个答案:

答案 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'