1、一般情况下,这个查询接口支持大约4000多个字符以内的sql语句查询,如果超过,就建议使用存储过程了。当然为了使SBO升级不出现问题(以前的版本SBO升级时会因为存储过程出问题),在升级前最好Drop这些存储过程,然后升级完成后补进去。
2、关于参数的问题,SBO查询接口引入一种特殊的参数传递机制,即'[%0]','[%1]'...,以前的版本没有引号,要注意不同版本升级造成的替换问题。
3、对于复杂查询逻辑的参数传递问题:大家最好先定义查询sql变量,然后对这些变量使用SBO参数赋值,然后在你的复杂查询逻辑中直接使用这些变量来传递参数,这种方法对调用存储过程等方面有很大好处,就是可以解决SBO的条件选择框的问题。例如:
declare @itemfrom nvarchar(20)
declare @itemto nvarchar(20)
declare @count int
select @count=count(t0.itemcode) from OITM T0 where T0.itemcode= '[%0]' or T0.itemcode= '[%1]'
set @itemfrom= '[%0]'
set @itemto= '[%1]'
select itemcode '物料代码',itemname '物料名称' from oitm where ((itemcode>=@itemfrom) or (@itemfrom is null) or (@itemfrom='') )and ((itemcode<=@itemTo) or (@itemTo is null)or (@itemTo=''))
4、对于字符型参数,最好加上or (@itemTo is null)or (@itemTo=''),这样条件就更灵活。对于数值参数采用(@itemTo is null)or (@itemTo=0)
5、对于SBO查询接口做报表,一般只能做一些简单的一维的报表。对于主细结构的报表就不好使了。不知哪位大虾有这方面的经验分享一下。
6、对于研发人员来说,如果开发的程序涉及到查询,希望在安装过程中直接安装到SBO系统里,方法有两个,一个是使用SDK,一个是直接插入。不过直接插入还是有风险的。但速度快。例子如下
declare @maxQnum int
Declare @maxIDX int
declare @sql nvarchar(4000)
delete from [OQCN] where [CatName]=N'自定义报表'
insert into [OQCN]([CategoryId], [CatName], [PermMask], [DataSource], [UserSign])
values(@maxQCategory,N'自定义报表','YYYYYYYYYYYYYYY','N',Null)
--说明OQCN主要存放您的报表的查询类别。
--报表1
--OUQR主要存放您的自定义查询。要注意IntrnalKey自动加1。
select @maxQnum=isnull(max(IntrnalKey),0)+1 from OUQR --where QCategory=@maxQCategory
delete from [OUQR] where [QName]=N'您的报表'
insert into [OUQR]([IntrnalKey], [QCategory], [QName], [QString], [QType], [ColumnSize])
values(@maxQnum,@maxQCategory,N'您的报表',N'declare @itemfrom nvarchar(20)
declare @itemto nvarchar(20)
declare @count int
select @count=count(t0.itemcode) from OITM T0 where T0.itemcode= '+''''+'[%0]'+''''+' or T0.itemcode= '+''''+'[%1]'+''''+'
set @itemfrom= '+''''+'[%0]'+''''+'
set @itemto= '+''''+'[%1]'+''''+'
select itemcode '物料代码',itemname '物料名称' from oitm where ((itemcode>=@itemfrom) or (@itemfrom is null) or (@itemfrom=+''''+''''+))and ((itemcode<=@itemTo) or (@itemTo is null)or (@itemTo=+''''+''''+))','W','RnNNNZFFTNTZNNFFFNFFNNRRRRNN')