教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
编程设计
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

Sybase数据库里面建立了一个存储过程,在SQL下无任何疑难,为啥在Powerbuilder 8自带地数据库Sybase AnyWhere 下就无法通过,帮忙处理

 
学院最新推荐文章
PS教程推荐
 
『Sybase数据库里面建立了一个存储过程,在SQL下无任何疑难,为啥在Powerbuilder 8自带地数据库Sybase AnyWhere 下就无法通过,帮忙处理』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
作者:superi 来源:csdn 点击数: 更新时间:2008-9-1 
ALTER procedure DBA.SumTable(@table varchar(50),@row varchar(50),@col varchar(50),@content varchar(50))
as
declare @sql1 varchar(8000),
@sql2 varchar(8000),
@sql3 varchar(8000),
@sql4 varchar(8000),
@sql5 varchar(8000),
@sql6 varchar(8000),
@i real,
@ic varchar(50),
@mc varchar(50)
execute('select ID=Identity(int,1,1),COL=''sum(case '+'devicename'+' when ''''''+'+'devicename'+'+'''''' then '+'value'+' else 0 end) as ''''''+'+'devicename'+'+'''''','' ,GID=0 into ##tmp from (select distinct '+'devicename'+'=replace('+'devicename'+','''''''','''''''''''') from '+'good'+')a')
select @i = Max(len(COL)) from ##tmp
--set @i=4000/@i
update ##tmp set GID = ID/@i
select @i = Max(GID),@mc = convert(varchar(50),@i) from ##tmp
select @sql1 = '',@sql2 = '',@sql3 = '',@sql4 = '',@sql5 = ''
while @i >= 0
  select @ic = convert(varchar(50),@i),@i = @i-1,@sql1 = '@'+@ic+' as varchar(4000),'+@sql1,@sql2 = '@'+@ic+'='''','+@sql2,@sql3 = 'select @'+
    @ic+'=@'+@ic+'+COL from ##tmp where gid='''+@ic+''''+"char"(13)+@sql3,@sql4 = '@'+@ic+'+'+@sql4
--set @sql5=''' from '+@table+' group by '+@row+''''
select @sql1 = 'declare '+"left"(@sql1,len(@sql1)-1)+"char"(13),@sql2 = 'select '+"left"(@sql2,len(@sql2)-1)+"char"(13),@sql4 = "left"(@sql4,len(@sql4)-1)
execute(@sql1+@sql2+@sql3+'set @'+
  @mc+'=left(@'+@mc+',len(@'+@mc+')-1)'+'execute(''select timetag,''+'+
  @sql4+'+'+@sql5+')')
drop table ##tmp

这个问题第1个回答:
.....
不会,帮顶一下
这个问题第2个回答:
Try:
SQL code

ALTER procedure DBA.SumTable(@table varchar(50),@row varchar(50),@col varchar(50),@content varchar(50)) 

as 

...


-->

SQL code

ALTER procedure DBA.SumTable(@table varchar(50),@row varchar(50),@col varchar(50),@content varchar(50)) 

as 

set nocount on

...


这个问题第3个回答:
两行注释处出问题了,不知道怎么解决,各位大侠帮忙一下。
这个问题第4个回答:
CREATE PROCEDURE SumTable
@table varchar(50), --表名
@row varchar(50), --行字段
@col varchar(50), --列字段
@content varchar(50)
-----WITH ENCRYPTION
AS
declare
@sql1 varchar(8000),
@sql2 varchar(8000),
@sql3 varchar(8000),
@sql4 varchar(8000),
@sql5 varchar(8000),
@sql6 varchar(8000),
@i int,
@ic varchar(50),
@mc varchar(50)
exec('select ID=Identity(int,1,1),COL=''sum(case '+@col+' when ''''''+'+@col+'+'''''' then '+@content+' else 0 end) as ''''''+'+@col+'+'''''','' ,GID=0 into ##tmp from (select distinct '+@col+'=replace('+@col+','''''''','''''''''''') from '+@table+')a')
select @i=Max(len(COL)) from ##tmp
set @i=4000/@i
update ##tmp set GID=ID/@i
select @i=Max(GID),@mc=cast(@i as varchar(50)) from ##tmp
select @sql1='',@sql2='',@sql3='',@sql4='',@sql5=''
while @i>=0
select @ic=cast(@i as varchar(50)),@i=@i-1,@sql1='@'+@ic+' as varchar(4000),'+@sql1,@sql2='@'+@ic+'='''','+@sql2,
@sql3='select @'+@ic+'=@'+@ic+'+COL from ##tmp where gid='''+@ic+''''+char(13)+@sql3,@sql4='@'+@ic+'+'+@sql4
set @sql5=''' from '+@table+' group by '+@row+''''
select @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13),@sql2='select '+left(@sql2,len(@sql2)-1)+char(13),@sql4=left(@sql4,len(@sql4)-1)
exec(@sql1+@sql2+@sql3+
'set @'+@mc+'=left(@'+@mc+',len(@'+@mc+')-1)'+
'exec(''select '+@row+',''+'+@sql4+'+'+@sql5+')'
)

drop table ##tmp
GO

在SQL Server下是这样的,都能通过,在Sybase下就不能通过了,错误显示131,不知道如何解决了
这个问题第5个回答:
有Sybase 区吗? 发到那里问问
这个问题第6个回答:
sybase不支持set语句吧,改成select

select @i=4000/@i
select @sql5=''' from '+@table+' group by '+@row+''''

这个问题第7个回答:
估计问题还有很多
cast也不支持
动态语句里的set也要修改

这个问题第8个回答:
您好,cast不支持,cast应该换成什么啊?
我把exec改成execute了,set改成select了,还有剩下的怎么改了,这下算是通过了,可问题还有,就是不能执行结果,郁闷

】【关闭窗口
·上页:
·下页:
相关文章
 
     数据库类教程 - MsSql综合技巧
普通教程这个表怎么设计???
普通教程末设定主键地情况下,怎么样完成
普通教程想问个关于范式地小疑难
普通教程sql排序加自动排名
普通教程邹老大?? 怎么样用代码检查测试
普通教程数据库字段疑难
普通教程求一SQL语句
普通教程请帮俺看看 怎么样写SQL查询 
普通教程字符插入
普通教程SQLServer排序Order By运用地是
普通教程SQL SERVER 函数
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光