在所有表中查找某个值的sql怎么写?(已经有sqlserver版的sql)
--在整个库里查某个值
declare @str varchar(100)
set @str='str' --要搜索的字符串
declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where convert(varchar,['+a.name+']) like ''%'+@str+'%'')
print ''select top 5 ['+a.name+'],* from ['+b.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
--所查列的字段类型
and a.xusertype in(175,239,231,167,56,60,108,106)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
请问能翻译成sqlanywhere版的吗?
[解决办法]
sf
[解决办法]
我给你PB的系统表,你自己尝试去做.
PB扩展属性系统表及其应用
(独孤求败二零零四年一月二十四日整理于深圳市南山区)
在PB第一连接数据库时,会自动在用户数据库中建立扩展属性数据字典,一共有5个以”pbcat”为前缀的表,分别是:pbcatcol、pbcatedt、pbcatfmt、pbcattbl和pbcatvld,这就是所谓的PB扩展属性系统表(Extended Attribute System Table),有叫PB Catalog Table。各表说明如下:
pbcattbl:数据库中的表
pbcatcol:数据库中的列
pbcatedt:编辑风格
pbcatfmt:显示格式
pbcatvld:有效性规则
PB扩展属性系统表保存了数据库中的表、列、显示格式、有效性规则和编辑风格等信息。当在数据库画板中增加或者删除字段时,相应地在pbcatcol和pbcattbl表中有一条相关记录自动插入或删除;同样,如果增加扩展属性,那么在pbcatfmt、pbcatvld和pbcatedt表中,也会建立相应的记录。
一、系统表说明
1、pbcattbl:数据库中的表,各字段说明如下:
字 段 名说 明
pbt_tnam表名
pbt_tid表的Sql Server Object ID(仅用于Sql Server)
pbt_ownr表的属主
pbd_fhgt数据字体高度,以PB中的单位表示
pbd_fwgt数据字体笔划粗细(400=Normal,700=Bold)
pbd_fitl数据字体是否斜体(Y=Yes,N=No)
pbd_funl数据字体是否为加下划线(Y=Yes,N=No)
pbd_fchr数据字体字符(0=ANSI,1=Symbol,255=OEM)
pbd_fptc数据字体的字符间距和系列,由2个常数相加得到Pitch(0=Default,1=Fixed,2=Varible)
Family(0=无所谓,16=Roman,32=Swiss,48=Modern,64=Scrit,80=Decorative)
pbd_ffce数据字体的字形
pbh_fhgt标题字体高度,以PB中的单位表示
pbh_fwgt标题字体笔划粗细(400=Normal,700=Bold)
pbh_fitl标题字体是否斜体(Y=Yes,N=No)
pbh_funl标题字体是否为加下划线(Y=Yes,N=No)
pbh_fchr标题字体字符(0=ANSI,1=Symbol,255=OEM)
pbh_fptc标题字体的字符间距和系列,由2个常数相加得到Pitch(0=Default,1=Fixed,2=Varible)
Family(0=无所谓,16=Roman,32=Swiss,48=Modern,64=Scrit,80=Decorative)
pbh_ffce标题字体的字形
pbl_fhgt标签字体高度,以PB中的单位表示
pbl_fwgt标签字体笔划粗细(400=Normal,700=Bold)
pbl_fitl标签字体是否斜体(Y=Yes,N=No)
pbl_funl标签字体是否为加下划线(Y=Yes,N=No)
pbl_fchr标签字体字符(0=ANSI,1=Symbol,255=OEM)
pbl_fptc标签字体的字符间距和系列,由2个常数相加得到Pitch(0=Default,1=Fixed,2=Varible)
Family(0=无所谓,16=Roman,32=Swiss,48=Modern,64=Scrit,80=Decorative)
pbl_ffce标签字体的字形
pbl_cmnt表的注释
2、pbcatcol:数据库中的列,各字段说明如下:
字 段 名说 明
pbc_tnam表名
pbc_tid表的Sql Server Object ID
pbc_ownr表的属主
pbc_cnam列名
pbc_cidSql ServerColumn ID
pbc_labl标签
pbc_lpos标签位置(23=左边,24=右边)
pbc_hdr标题
pbc_hpos标题位置(23=左边,24=右边,25=中间)
pbc_jtfy对齐方式(23=左边,24=右边)
pbc_mask显示格式的名称
pbc_case大小写(26=Actual,27=Upper,28=Lower)
pbc_hght列高度
pbc_wdth列宽度
pbc_ptrn有效规则的名称
pbc_bmap位图/图片(Y=Yes,N=No)
pbc_init初始值
pbc_cmnt列的注释
pbc_edit编辑风格
pbc_tag(保留)
3、pbcatfmt:显示风格,各字段说明如下:
字 段 名说 明
pbf_name显示风格的名称
pbf_frmt显示风格
pbf_type格式应用于何种数据类型
pbf_cntr并发用法标志
4、pbcatvld:有效性规则,各字段说明如下:
字 段 名说 明
pbv_name有效性规则的名称
pbv_vald有效性规则
pbv_type有效性规则作用的数据类型
pbv_cntr并发用法标志
pbv_msg有效性规则出错信息
5、pbcatedt:编辑风格,各字段说明如下:
字 段 名说 明
pbe_name编辑风格的名称
pbe_edit编辑风格
pbe_type编辑风格类型:85=CheckBox,86=RadioButton,87=DropDownListBox,
88=DropDownDataWindow,89=Edit,90=Edit Mask
pbe_cntr修改次数计数器
pbe_segn对于PNCatEdt标志中需要多行的编辑类型,指定行循序
pbe_flag编辑风格标志
pbe_work附加域
二、相关知识
1、PB扩展属性系统表在PB第一连接数据库时会建立,不过此时连接数据库的用户应该具有建表等相应权限。
2、PB扩展属性系统表是PB自动维护的,但如果对数据库表的结构的修改等操作是在其他数据库工具完成,而没有通过PB,例如在ISQL中建立表、增加表字段或者删除表,系统表不会自动修改。只有在PB中修改表定义,系统表才相应改动。上面的这些信息要删除的话,可以通过PB的Sync Extended Attributes同步功能来完成。
三、应用实例
1、数据库设置,见附件(pbbook.db)
2、建立一个工作空间(workspace),取名为:systemtable。
3、建立一个应用(application),取名为:systemtable。
4、建立一个窗口,取名为:w_test,内置如下控件:
控件名类型说明
ddlb_tableDropDownListBox显示数据库中的表
lb_columnListBox显示当前表的所有列
st_1Static Text选择表
st_2Static Text选择字段
cb_createCommand Button创建数据窗口
cb_closeCommand Button关闭窗口
dw_1DataWindow创建数据窗口的结果,Datawindow Object name为空。
5、设置窗口中相关控件的属性
1)、ddlb_table:Sorted设置为false
2)、lb_column:Sorted设置为false,MultiSelect属性设置为True,VscrollBar设置为True。
6、定义窗口实例变量
string is_table[] //所有表
string is_column[] //当前表的所有列
string is_colmnt[] //当前表所有列注释
string is_cur_table //当前表
7、窗口的open事件:
string ls_tnam
string ls_cmnt
integer li_i
//定义游标(取表名及注释)
DECLARE get_table CURSOR FOR
SELECT "pbcattbl"."pbt_tnam",
"pbcattbl"."pbt_cmnt"
FROM "pbcattbl" ;
//打开游标
Open get_table;
li_i = 1
Fetch get_table into :ls_tnam, :ls_cmnt;
Do while sqlca.sqlcode = 0
If Not IsNull(ls_cmnt) and ls_cmnt <> '' then
is_table[li_i] = ls_tnam //记录表名
ddlb_table.additem( ls_cmnt)//加载到列表框
li_i ++
End if
Fetch get_table into :ls_tnam, :ls_cmnt;
Loop
//关闭游标
Close get_table;
8、ddlb_table的SelectionChanged事件:
string ls_tnam //表名
string ls_cnam //列名
string ls_cmnt //列注释
integer li_i
is_cur_table = is_table[Index] // 当前表名
//定义游标,取列名及列注释
DECLARE get_column CURSOR FOR
SELECT "pbcatcol"."pbc_cnam",
"pbcatcol"."pbc_cmnt"
FROM "pbcatcol"
where "pbcatcol"."pbc_tnam" = :is_cur_table;
//重置数据窗口
lb_column.reset( )
li_i = 1
Open get_column;
Fetch get_column into :ls_cnam, :ls_cmnt;
Do while sqlca.sqlcode = 0
If not isnull(ls_cmnt) and ls_cmnt <> '' then
is_column[li_i] = ls_cnam //保存列名,创建数据窗口时用
is_colmnt[li_i] = ls_cmnt //保存列注释,创建数据窗口汉化标题
lb_column.additem(ls_cmnt ) //加载到列表框
li_i ++
End if
Fetch get_column into :ls_cnam, :ls_cmnt;
Loop
Close get_column;
9、cb_create的clicked事件:
integer li_itemcount
integer li_i
integer li_Index
string ls_syntax, ls_sqlselect
string ls_Errors, ls_errmsg
//重置数据窗口
dw_1.Reset()
//如果没有列或没有列选中,则返回
li_itemcount = lb_column.TotalItems ( )
If li_itemcount <= 0 then return
IF lb_column.totalselected( ) <= 0 then return
For li_Index = 1 to li_itemcount
li_i = lb_column.State ( li_Index )
If li_i = 1 then //选中
ls_sqlselect = ls_sqlselect + "," + is_column[li_Index]//列
End if
Next
//去除最前一个“,”号
ls_sqlselect = Right(ls_sqlselect, len(ls_sqlselect) - 1)
//动态创建数据窗口对象DataWindow
ls_sqlselect = "select " + ls_sqlselect+ " from " + is_cur_table
ls_syntax = sqlca.syntaxfromsql(ls_sqlselect, "style(type=grid)", ls_errmsg)
IF Len (ls_errmsg) > 0 THEN
MessageBox("创建失败", "错误: " + ls_errmsg)
RETURN
END IF
dw_1.create (ls_syntax, ls_Errors)
IF Len(ls_Errors) > 0 THEN
MessageBox("创建失败", "错误: " + ls_Errors)
RETURN
END IF
//汉化标题区(Header Band)文本
For li_Index = 1 to li_itemcount
dw_1.modify(is_column[li_Index] + "_t.text = '" + is_colmnt[li_Index] + "'")
Next
//检索数据
dw_1.settransobject(sqlca);
dw_1.retrieve()
10、cb_close的clicked事件:
Close(parent)
11、效果图: