update #t_dj
set
@spkc=jcshl=case when @spid=spid then @spkc+upshl else kcshl+upshl end,
@spje=jcje=case when @spid=spid then @spje+upje else kcje+upje end,
@hwkc=hwjcsh=case when @spid=spid and @hw=hw then @hwkc+upshl else hwshl+upshl end,
@hwje=hwjcer=case when @spid=spid and @hw=hw then @hwje+upje else hwje+upje end,
plh='Z'+right('0000000000'+ltrim(str(@m)),10), @m=@m+1,
@spid=spid,
@hw=hw
研究了几天都没解决,大家帮帮忙吧
8 个解决方案
#1
你贴的sql没啥看的,看参数类型和表字段对应的类型。
#2
查看一下jcshl類型,查看一下變量類型@spje/字段upje--這一段的類型
#3
@spkc=jcshl=case when @spid=spid then @spkc+upshl else kcshl+upshl end
???
这是什么语法?
@spkc 是bit型?
不像吧.
???
这是什么语法?
@spkc 是bit型?
不像吧.
#4
还真能这么搞!
create table tb(id int)
insert into tb select 1
go
declare @i int
declare @j int
declare @k int
set @j=5
set @k=3
update tb
set @i=id=case when @k=3 then 20 else 30 end
select @i,@j,@k
select * from tb
/*
----------- ----------- -----------
20 5 3
(1 行受影响)
id
-----------
20
(1 行受影响)
*/
go
drop table tb
#5
declare @djlx char(3),
@djlx1 char(1),
@zhph char(12),
@cor_ysh dec(20,2),
@cor_yf dec(20,2),
@tmp_jcsl dec(14,2)
set @djlx=left(@djbh,3)
set @djlx1=left(@djbh,1)
set @zhph=''
set @cor_ysh=0
set @cor_yf=0
set @tmp_jcsl=0
declare
@spid char(11),
@hw char(11),
@spkc decimal,
@spje decimal,
@hwkc decimal,
@hwje decimal,
@maxbh char(11),
@jzhh char(11)
set @spid='***'
set @hw='***'
这是存储过程声明变量的部分,这个存储过程,在SQL server2000下面运行的很正常,但到了2005就不行了
@djlx1 char(1),
@zhph char(12),
@cor_ysh dec(20,2),
@cor_yf dec(20,2),
@tmp_jcsl dec(14,2)
set @djlx=left(@djbh,3)
set @djlx1=left(@djbh,1)
set @zhph=''
set @cor_ysh=0
set @cor_yf=0
set @tmp_jcsl=0
declare
@spid char(11),
@hw char(11),
@spkc decimal,
@spje decimal,
@hwkc decimal,
@hwje decimal,
@maxbh char(11),
@jzhh char(11)
set @spid='***'
set @hw='***'
这是存储过程声明变量的部分,这个存储过程,在SQL server2000下面运行的很正常,但到了2005就不行了
#6
要求变量和列的数据类型定义成同样的数据类型.
create table tb(id decimal(8,2))--这儿的定义
insert into tb select 1
go
declare @i decimal(8,3) --和这儿的定义不一样
declare @k int
set @k=3
update tb
set @i=id=case when @k=3 then 20.1 else 30.5 end
/*
消息 425,级别 16,状态 1,第 4 行
接收变量的数据类型 decimal 不等于列 'id' 的数据类型 decimal。
*/
go
drop table tb
#7
数据库当前的兼容等级是什么?
分别修改一下数据库的兼容等级为80或90试试.
分别修改一下数据库的兼容等级为80或90试试.
#8
declare @spkc decimal --要将此处的 decimal 精度定义与表中 jcshl 的精度定义设置为相同
create table tb(jcshl decimal(8,2))
insert into tb select 12.98
update tb set @spkc=jcshl=12.98
/*
消息 425,级别 16,状态 1,第 4 行
接收变量的数据类型 decimal 不等于列 'jcshl' 的数据类型 decimal。
*/
go
drop table tb
go
declare @spkc decimal(8,2) --这样就不会出错了
create table tb(jcshl decimal(8,2))
insert into tb select 12.98
update tb set @spkc=jcshl=12.98
go
drop table tb
#1
你贴的sql没啥看的,看参数类型和表字段对应的类型。
#2
查看一下jcshl類型,查看一下變量類型@spje/字段upje--這一段的類型
#3
@spkc=jcshl=case when @spid=spid then @spkc+upshl else kcshl+upshl end
???
这是什么语法?
@spkc 是bit型?
不像吧.
???
这是什么语法?
@spkc 是bit型?
不像吧.
#4
还真能这么搞!
create table tb(id int)
insert into tb select 1
go
declare @i int
declare @j int
declare @k int
set @j=5
set @k=3
update tb
set @i=id=case when @k=3 then 20 else 30 end
select @i,@j,@k
select * from tb
/*
----------- ----------- -----------
20 5 3
(1 行受影响)
id
-----------
20
(1 行受影响)
*/
go
drop table tb
#5
declare @djlx char(3),
@djlx1 char(1),
@zhph char(12),
@cor_ysh dec(20,2),
@cor_yf dec(20,2),
@tmp_jcsl dec(14,2)
set @djlx=left(@djbh,3)
set @djlx1=left(@djbh,1)
set @zhph=''
set @cor_ysh=0
set @cor_yf=0
set @tmp_jcsl=0
declare
@spid char(11),
@hw char(11),
@spkc decimal,
@spje decimal,
@hwkc decimal,
@hwje decimal,
@maxbh char(11),
@jzhh char(11)
set @spid='***'
set @hw='***'
这是存储过程声明变量的部分,这个存储过程,在SQL server2000下面运行的很正常,但到了2005就不行了
@djlx1 char(1),
@zhph char(12),
@cor_ysh dec(20,2),
@cor_yf dec(20,2),
@tmp_jcsl dec(14,2)
set @djlx=left(@djbh,3)
set @djlx1=left(@djbh,1)
set @zhph=''
set @cor_ysh=0
set @cor_yf=0
set @tmp_jcsl=0
declare
@spid char(11),
@hw char(11),
@spkc decimal,
@spje decimal,
@hwkc decimal,
@hwje decimal,
@maxbh char(11),
@jzhh char(11)
set @spid='***'
set @hw='***'
这是存储过程声明变量的部分,这个存储过程,在SQL server2000下面运行的很正常,但到了2005就不行了
#6
要求变量和列的数据类型定义成同样的数据类型.
create table tb(id decimal(8,2))--这儿的定义
insert into tb select 1
go
declare @i decimal(8,3) --和这儿的定义不一样
declare @k int
set @k=3
update tb
set @i=id=case when @k=3 then 20.1 else 30.5 end
/*
消息 425,级别 16,状态 1,第 4 行
接收变量的数据类型 decimal 不等于列 'id' 的数据类型 decimal。
*/
go
drop table tb
#7
数据库当前的兼容等级是什么?
分别修改一下数据库的兼容等级为80或90试试.
分别修改一下数据库的兼容等级为80或90试试.
#8
declare @spkc decimal --要将此处的 decimal 精度定义与表中 jcshl 的精度定义设置为相同
create table tb(jcshl decimal(8,2))
insert into tb select 12.98
update tb set @spkc=jcshl=12.98
/*
消息 425,级别 16,状态 1,第 4 行
接收变量的数据类型 decimal 不等于列 'jcshl' 的数据类型 decimal。
*/
go
drop table tb
go
declare @spkc decimal(8,2) --这样就不会出错了
create table tb(jcshl decimal(8,2))
insert into tb select 12.98
update tb set @spkc=jcshl=12.98
go
drop table tb