存储过程中采用“拼接SQL”,变量赋值
ALTER proc [dbo].[UpdateMeter]
@MeterNo char(20),
@MeterName varchar(50),
@MeterAlias char(16),
@MeterType char(4),
@collect  int,
@Unit char(14),
@MaxQty bigint,
@BaseQty bigint,
@DAFrequence bigint,
@DAStartTime datetime,
@magnifyingPower varchar(50),
@meterCategory varchar(20),
@meterUseType varchar(20),
@useDepartment varchar(50),
@buildingNo varchar(30),
@usePlace varchar(30),
@MAXIncQty  int
as
declare @sql nvarchar(800)
set @sql='update Meter set MeterNo='''+@MeterNo+''',
						   MeterName='''+@MeterName+''',
						   MeterAlias='''+@MeterAlias+''',
						   MeterType='''+@MeterType+''',
						   Unit='''+@Unit+''',
						   MaxQty='+convert(nvarchar(20),@MaxQty)+',
						   BaseQty='+convert(nvarchar(20),@BaseQty)+',
						   DAFrequence='+convert(nvarchar(20),@DAFrequence)+',
						   DAStartTime='''+convert(nvarchar(25),@DAStartTime)+''',
						   magnifyingPower='''+@magnifyingPower+''',
						   meterCategory='''+@meterCategory+''',
						   meterUseType='''+@meterUseType+''',
						   useDepartment='''+@useDepartment+''',
						   buildingNo='''+@buildingNo+''',
						   usePlace='''+@usePlace+''',
						   MAXIncQty='''+@MAXIncQty+'''
		 where MeterNo='''+@MeterNo+''''
exec (@sql)
问题一:这样“拼接SQL”的时候什么时候用“单引号”,什么时候用“双引号”,什么时候用“单引号+双引号”???
问题二:出现报错,信息如下。
     在将 nvarchar 值 'update Meter set MeterNo='CS001               ',
						   MeterName='CS',
						   MeterAlias='                ',
						   MeterType='EM  ',
						   Unit='kWh           ',
						   MaxQty=9999999,
						   BaseQty=0,
						   DAFrequence=15,
						   DAStartTime='05 23 2012 10:17AM',
						   magnifyingPower='',
						   meterCategory='Summary   ',
						   meterUseType='C         ',
						   useDepartment='',
						   buildingNo='310000Fa001',
						   usePlace='',
						   MAXIncQty='' 转换成数据类型 int 时失败。
为什么报错,应该怎样修改???
------解决方案--------------------MAXIncQty 是int 类型 你用cast 或convert转换一下就可以了。
------解决方案--------------------MAXIncQty int 类型怎么能这样赋值  MAXIncQty=''
MAXIncQty=NULL 这样就不会报错了。
------解决方案--------------------你的sql 是字符串类型的,而你在拼接的时候加了一个int型的变量,所以说要把int转化为字符串类型的
这样字符串=字符串+字符串了
没有双引号,只有单引号,字符串中2个单引号转义为一个单引号
------解决方案--------------------SQL code
set @sql='update Meter set MeterNo='''+@MeterNo+''',
MeterName='''+@MeterName+''',
MeterAlias='''+@MeterAlias+''',
MeterType='''+@MeterType+''',
Unit='''+@Unit+''',
MaxQty='+convert(nvarchar(20),@MaxQty)+',
BaseQty='+convert(nvarchar(20),@BaseQty)+',
DAFrequence='+convert(nvarchar(20),@DAFrequence)+',
DAStartTime='''+convert(nvarchar(25),@DAStartTime)+''',
magnifyingPower='''+@magnifyingPower+''',
meterCategory='''+@meterCategory+''',
meterUseType='''+@meterUseType+''',
useDepartment='''+@useDepartment+''',
buildingNo='''+@buildingNo+''',
usePlace='''+@usePlace+''',
MAXIncQty='+convert(nvarchar(20),@MAXIncQty)+''
------解决方案--------------------
动态SQL先PRINT出来,看看PRINT出来的东西哪错了再改改
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------