SQL2000存储过程中动态sql

bedsb 2017-01-02 02:30:28
数据表中有12列,M1,M2.........M12对应12个月的重量,我想数据 取到的 weight重量,根据月份分别UPDATE相应的列。如现在201701月就UPDATE M1字段。。以此类推。
我想在生成SQL语句。。

declare @wk_yy varchar(4)
declare @wk_mm varchar(2),
@sql varchar(5000),
@line_no varchar(2),
@wlmc_no1 varchar(2),
@weight numeric(18,6)
set @wk_mm = '01'
set @weight = 2
set @sql = 'update cb_tbfyhjbs set m'+@wk_mm+ '=' + @weight --+ 'where wk_yymm = '+@wk_yy --+
-- 'and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1+''
print @sql
exec( 'update cb_tbfyhjbs set m'+@wk_mm+ '=' + @weight +
'where wk_yymm = '2016' '
'and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1')'
这样的话一直提示
服务器: 消息 8114,级别 16,状态 5,行 9
将数据类型 varchar 转换为 numeric 时出错。
不知道怎么弄了
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_35289351 2017-01-03
  • 打赏
  • 举报
回复
楼主有3个问题。 1、where ,and 等字前面,缺少1个空格 2、提示“将数据类型 varchar 转换为 numeric 时出错”,那就要先把 numeric的转为字符 3、动态拼语句,好像字段是字符的,最好在后面用引号引起来。
baidu_35289351 2017-01-03
  • 打赏
  • 举报
回复
DECLARE @wk_yy VARCHAR(4) DECLARE @wk_mm VARCHAR(2) , @sql VARCHAR(5000) , @line_no VARCHAR(2) , @wlmc_no1 VARCHAR(2) , @weight numeric(18,6) SET @wk_mm = '01' SET @weight = 2.0 SET @wk_yy = '2016' SET @line_no ='10' SET @wlmc_no1 = '20' SET @sql = 'update cb_tbfyhjbs set m' + @wk_mm + '=' + cast(@weight as varchar(24)) + ' where wk_yymm = ' + '''' + @wk_yy + '''' + ' and line_no = ' + '''' + @line_no + '''' + ' and wlmc_no1 = ' + '''' + @wlmc_no1 + '''' PRINT @sql; -- update cb_tbfyhjbs set m01=2.000000 where wk_yymm = '2016' and line_no = '10' and wlmc_no1 = '20'
中国风 2017-01-02
  • 打赏
  • 举报
回复
注意语句之间的空格,注释部份用打印语句,你需要把数字转为字符再串起来,直接用会报错,你上面应该是用了这部分打印语句,在WHERE处加上一个空格
 DECLARE @wk_yy VARCHAR(4);
 DECLARE @wk_mm VARCHAR(2) ,
    @sql VARCHAR(5000) ,
    @line_no VARCHAR(2) ,
    @wlmc_no1 VARCHAR(2) ,
    @weight NUMERIC(18, 6);
 SET @wk_mm = '01';
 SET @weight = 2;
 --SET @sql = 'update cb_tbfyhjbs set m' + @wk_mm + '=' + @weight;
 --+ 'where wk_yymm = '+@wk_yy --+
    --  'and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1+''
 PRINT @sql;
 EXEC(   'update cb_tbfyhjbs set m'+@wk_mm+ '=' + @weight + ' where wk_yymm = ''2016''and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1)
bedsb 2017-01-02
  • 打赏
  • 举报
回复

DECLARE @wk_yy VARCHAR(4);
DECLARE @wk_mm VARCHAR(2) ,
@sql VARCHAR(5000) ,
@line_no VARCHAR(2) ,
@wlmc_no1 VARCHAR(2) ,
@weight NUMERIC(18, 6);
SET @wk_mm = '01';
SET @weight = 2;
SET @sql = 'update cb_tbfyhjbs set m' + @wk_mm + '=' + @weight;
+ 'where wk_yymm = '+ @wk_yy
+ 'and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1+''
PRINT @sql;
EXEC( 'update cb_tbfyhjbs set m'+@wk_mm+ '=' + @weight +
'where wk_yymm = ''2016''and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1)

服务器: 消息 170,级别 15,状态 1,行 10
第 10 行: '+' 附近有语法错误。
中国风 2017-01-02
  • 打赏
  • 举报
回复
用以下测测
 DECLARE @wk_yy VARCHAR(4);
 DECLARE @wk_mm VARCHAR(2) ,
    @sql VARCHAR(5000) ,
    @line_no VARCHAR(2) ,
    @wlmc_no1 VARCHAR(2) ,
    @weight NUMERIC(18, 6);
 SET @wk_mm = '01';
 SET @weight = 2;
 SET @sql = 'update cb_tbfyhjbs set m' + @wk_mm + '=' + @weight;
 --+ 'where wk_yymm = '+@wk_yy --+
    --  'and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1+''
 PRINT @sql;
 EXEC(   'update cb_tbfyhjbs set m'+@wk_mm+ '=' + @weight + 
 'where wk_yymm = ''2016''and line_no = '+@line_no+ 'and wlmc_no1 = ' + @wlmc_no1)
bedsb 2017-01-02
  • 打赏
  • 举报
回复
weight是数值型的哇
0与1之间 2017-01-02
  • 打赏
  • 举报
回复
查检一下你的字段类型

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧