日期:2014-05-18  浏览次数:20393 次

存储过程中可以这样写吗?为什么总是出错?
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   2.0的报错信息:
列前缀   'xlglyike '   与查询中所用的表名或别名不匹配。
列前缀   'xlglyike '   与查询中所用的表名或别名不匹配。
列前缀   'xlglyike '   与查询中所用的表名或别名不匹配。
列前缀   'xlglyike '   与查询中所用的表名或别名不匹配。
列前缀   'AssessItem '   与查询中所用的表名或别名不匹配。
列前缀   'manager '   与查询中所用的表名或别名不匹配。
列前缀   'TotalAssess '   与查询中所用的表名或别名不匹配。
列前缀   'TotalAssess '   与查询中所用的表名或别名不匹配。
列前缀   'TotalAssess '   与查询中所用的表名或别名不匹配。

'xlglyike '   是动态表名

------解决方案--------------------
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)
------解决方案--------------------
@TotalID int,
@ManagerID int,

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