VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 700|回复: 9

存储过程中动态SQL运行出错

[复制链接]

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-6 00:30:01 | 显示全部楼层 |阅读模式
.net环境提示信息:
“第 1 行: '=' 附近有语法错误。”
存储过程为:


ALTER  PROCEDURE Pr_UpdatePoint
(
        @ManagerID int,
        @departID int,
        @StartTime datetime,
        @EndTime datetime,
        @NowTime datetime,
        @TableName varchar(64)
)
AS
       
declare @sqlcommand varchar(2000)
declare @sqlcommand2 varchar(2000)
declare @sqlcommand3 varchar(2000)
declare @sqlcommand4 varchar(2000)
declare @tempID int
declare        @TotalID int

select @sqlcommand='select '+rtrim(@TotalID)+'=TotalID from '+@TableName+' where '+rtrim(@TotalID)+' is null'
exec(@sqlcommand)
if @TotalID is null
begin
  select @sqlcommand2='insert into[TotalAssess]
        (TotalPoint,StartTime,EndTime,NowTime)
        SELECT SUM(RealPoint),'''+convert(varchar,@StartTime,120)+''','''+convert(varchar,@EndTime,120)+''','''+convert(varchar,@NowTime,120)+''' FROM '+@TableName+' where TotalID=null '
exec(@sqlcommand2)


select @sqlcommand3='UPDATE Assess set TotalID='+str(@TotalID)+' where TotalID is null'
exec(@sqlcommand3)

exec('update TotalAssess set ManagerID='+@ManagerID+',departID='+@departID+',checkYN="未审核" where TotalID='+@tempID+'')

end

不知道错在哪里
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-3-25 08:30:01 | 显示全部楼层
ALTER  PROCEDURE Pr_UpdatePoint
(
        @ManagerID int,
        @departID int,
        @StartTime datetime,
        @EndTime datetime,
        @NowTime datetime,
        @TableName varchar(64)
)
AS
       
declare @sqlcommand varchar(2000)
declare @sqlcommand2 varchar(2000)
declare @sqlcommand3 varchar(2000)
declare @sqlcommand4 varchar(2000)
declare @tempID int
declare        @TotalID int

select @sqlcommand='select '+rtrim(@TotalID)+'=TotalID from '+@TableName+' where '+rtrim(@TotalID)+' is null'
exec(@sqlcommand)
if @TotalID is null
begin
          select @sqlcommand2='insert into[TotalAssess](TotalPoint,StartTime,EndTime,NowTime)
                SELECT SUM(RealPoint),'''+convert(varchar,@StartTime,120)+''','''+convert(varchar,@EndTime,120)+''','''+convert(varchar,@NowTime,120)+''' FROM '+@TableName+' where TotalID is null '
          exec(@sqlcommand2)


        select @sqlcommand3='UPDATE Assess set TotalID='+str(@TotalID)+' where TotalID is null'
        exec(@sqlcommand3)

        exec('update TotalAssess set ManagerID='+@ManagerID+',departID='+@departID+',checkYN=''未审核'' where TotalID='+@tempID+'')

end

这样看看
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-3-25 10:15:02 | 显示全部楼层
TotalID=null   你这个地方错了   
应该是   TotalID is null
回复

使用道具 举报

0

主题

49

帖子

35.00

积分

新手上路

Rank: 1

积分
35.00
发表于 2020-3-25 11:45:01 | 显示全部楼层
把@sqlcommand变量print一下
看看是什么结果?
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-4-1 09:15:01 | 显示全部楼层
cv4bf5d65fd
---------------------------------------
我改了一下,不行,这两种写法应该是一样的

michealhenry
----------------------------------------
我print结果也是一样的啊?
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-5-4 01:45:01 | 显示全部楼层
大家再帮忙看看,究竟是语法错误还是程序错误?
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-5-4 21:00:01 | 显示全部楼层
ALTER  PROCEDURE Pr_UpdatePoint
(
@ManagerID int,
@departID int,
@StartTime datetime,
@EndTime datetime,
@NowTime datetime,
@TableName varchar(64)
)
AS

declare @sqlcommand varchar(2000)
declare @sqlcommand2 varchar(2000)
declare @sqlcommand3 varchar(2000)
declare @sqlcommand4 varchar(2000)
declare @tempID int
declare @TotalID int  ---这里加空格

select @sqlcommand='select '+rtrim(@TotalID)+'=TotalID from '+@TableName+' where '+rtrim(@TotalID)+' is null'
exec(@sqlcommand)
if @TotalID is null
begin
  select @sqlcommand2='insert into [TotalAssess]       ---这里加空格(TotalPoint,StartTime,EndTime,NowTime)
SELECT SUM(RealPoint),'''+convert(varchar,@StartTime,120)+''','''+convert(varchar,@EndTime,120)+''','''+convert(varchar,@NowTime,120)+''' FROM '+@TableName+' where TotalID is null '
  exec(@sqlcommand2)


select @sqlcommand3='UPDATE Assess set TotalID='+str(@TotalID)+' where TotalID is null'
exec(@sqlcommand3)

exec('update TotalAssess set ManagerID='+@ManagerID+',departID='+@departID+',checkYN=''未审核'' where TotalID='+@tempID+'')

end

--这样看看   你有两个地方没有加空格
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-5-5 16:30:01 | 显示全部楼层
exec('update TotalAssess set ManagerID='+@ManagerID+',departID='+@departID+',checkYN=''未审核'' where TotalID='+@tempID+'')

这句也不对,@ManagerID 、@departID 、 @tempID  都是int , 不能当字符串连接,用rtrim()扩起来,

exec('update TotalAssess set ManagerID='+rtrim(@ManagerID)+',departID='+rtrim(@departID)+',checkYN=''未审核'' where TotalID='+rtrim(@tempID))
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-5-7 15:15:01 | 显示全部楼层
cv4bf5d65fd :
提示:'rtrim'附近有语法错误
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-5-22 04:00:01 | 显示全部楼层
ALTER  PROCEDURE Pr_UpdatePoint
(
@ManagerID int,
@departID int,
@StartTime datetime,
@EndTime datetime,
@NowTime datetime,
@TableName varchar(64)
)
AS

declare @sqlcommand varchar(2000)
declare @sqlcommand2 varchar(2000)
declare @sqlcommand3 varchar(2000)
declare @sqlcommand4 varchar(2000)
declare @tempID int
declare @TotalID int

select @sqlcommand='select '+@TotalID+'=TotalID from '+@TableName+' where '+@TotalID+' is null'
exec(@sqlcommand)
if @TotalID = null
begin
        select @sqlcommand2='insert into [TotalAssess](TotalPoint,StartTime,EndTime,NowTime) SELECT SUM(RealPoint),'''+convert(varchar,@StartTime,120)+''','''+convert(varchar,@EndTime,120)+''','''+convert(varchar,@NowTime,120)+''' FROM '+@TableName+' where TotalID is null '
          exec(@sqlcommand2)

       
        select @sqlcommand3='UPDATE Assess set TotalID='+@TotalID+' where TotalID is null'
        exec(@sqlcommand3)

        exec('update TotalAssess set ManagerID='+@ManagerID+',departID='+@departID+',checkYN=''未审核'' where TotalID='+@tempID)

end
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表