VerySource

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

存储过程中可以这样写吗?为什么总是出错?

[复制链接]

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-28 13:20:02 | 显示全部楼层 |阅读模式
declare   @sqlcommand   char(200)

select   @sqlcommand='select '+rtrim(@TableName)+'.AssessID,'+rtrim(@TableName)+'.RealPoint,'+rtrim(@TableName)+'.assessAccord,'+rtrim(@TableName)+'.ItemComment,AssessItem.ItemName,manager.ManagerName,TotalAssess.CheckComment,TotalAssess.StartTime,TotalAssess.EndTime,TotalAssess.NowTime
        from   manager,TotalAssess,AssessItem,'+rtrim(@TableName)+' where TotalAssess.TotalID='+rtrim(@TotalID)+' and TotalAssess.TotalID=Assess.TotalID  and Assess.ManagerID='+rtrim(@ManagerID)+' and Assess.ManagerID=manager.ManagerID and Assess.ItemID=AssessItem.ItemID'

  EXEC(@sqlcommand)

.net 的报错信息:
列前缀 'xlglyike' 与查询中所用的表名或别名不匹配。
列前缀 'xlglyike' 与查询中所用的表名或别名不匹配。
列前缀 'xlglyike' 与查询中所用的表名或别名不匹配。
列前缀 'xlglyike' 与查询中所用的表名或别名不匹配。
列前缀 'AssessItem' 与查询中所用的表名或别名不匹配。
列前缀 'manager' 与查询中所用的表名或别名不匹配。
列前缀 'TotalAssess' 与查询中所用的表名或别名不匹配。
列前缀 'TotalAssess' 与查询中所用的表名或别名不匹配。
列前缀 'TotalAssess' 与查询中所用的表名或别名不匹配。

'xlglyike' 是动态表名
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-2-24 10:30:01 | 显示全部楼层
@TableName 是什么类型
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-2-24 11:00:01 | 显示全部楼层
ALTER  PROCEDURE Pr_GetMorePoint
(
    @TotalID int,
    @ManagerID int,
    @TableName   varchar(64)
)
AS
这是上面的@TableName是动态表名
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-2-24 13:45:02 | 显示全部楼层
declare   @sqlcommand   char(200)   
这句改成
declare   @sqlcommand   varchar(8000)
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-2-24 14:30:01 | 显示全部楼层
是变量没有处理好
declare   @sqlcommand   varchar(200),@tablename varchar(100),@TotalID int,@ManagerID int
set @tablename='ta'
select   @sqlcommand='select '+rtrim(@TableName)+'.AssessID,'+rtrim(@TableName)+'.RealPoint,'+rtrim(@TableName)+'.assessAccord,'+rtrim(@TableName)+'.ItemComment,AssessItem.ItemName,manager.ManagerName,TotalAssess.CheckComment,TotalAssess.StartTime,TotalAssess.EndTime,TotalAssess.NowTime
        from   manager,TotalAssess,AssessItem,'+rtrim(@TableName)+' where TotalAssess.TotalID='+rtrim(@TotalID)+' and TotalAssess.TotalID=Assess.TotalID  and Assess.ManagerID='+rtrim(@ManagerID)+' and Assess.ManagerID=manager.ManagerID and Assess.ItemID=AssessItem.ItemID'

  EXEC(@sqlcommand)这样就会出错
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-2-24 16:30:02 | 显示全部楼层
declare @sqlcommand   varchar(8000)

select   @sqlcommand='select '+rtrim(@TableName)+'.AssessID,'+rtrim(@TableName)+'.RealPoint,'+rtrim(@TableName)+'.assessAccord,'+rtrim(@TableName)+'.ItemComment,AssessItem.ItemName,manager.ManagerName,TotalAssess.CheckComment,TotalAssess.StartTime,TotalAssess.EndTime,TotalAssess.NowTime from   manager,TotalAssess,AssessItem,'+rtrim(@TableName)+' where TotalAssess.TotalID='+str(@TotalID)+' and TotalAssess.TotalID=Assess.TotalID  and Assess.ManagerID='+str(@ManagerID)+' and Assess.ManagerID=manager.ManagerID and Assess.ItemID=AssessItem.ItemID'

EXEC(@sqlcommand)
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-2-29 22:15:01 | 显示全部楼层
@TotalID int,
@ManagerID int,

这两个变量是整型的   要用str() 函数把它变成字符串才能连接  而且int型也不能用rtrim啊~~~
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-3-2 20:30:02 | 显示全部楼层
declare   @sqlcommand   char(200)
第一个问题应该在这里

变量太短了,只到表名之前
回复

使用道具 举报

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

本版积分规则

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

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