2,727
社区成员
发帖
与我相关
我的任务
分享
列举SQL Server中某一数据库中表名
*-----------------------------------
lnsqlhandle=SQLSTRINGCONNECT("driver=SQL Server;server=计算机名;uid=sa;pwd=;database=数据库名")
IF lnsqlhandle<0
MESSAGEBOX('连接失败!',16,'信息提示')
RETURN
ENDIF
lnsucc=SQLTABLES(lnsqlhandle,'TABLE','MyTable') &&'TABLE'必须大写,取得用户表名
*lnsucc=SQLTABLES(lnsqlhandle,'VIEW','MyTable') &&'VIEW'必须大写,取得视图名
*lnsucc=SQLTABLES(lnsqlhandle,'SYSTEM TABLE','MyTable') &&'SYSTEM TABLE'必须大写,取得系统表名
*lnsucc=SQLTABLES(lnsqlhandle,'','MyTable') &&'取得所有表名
if lnsucc<0
MESSAGEBOX('出错了!',16,'信息提示')
RETURN
endif
SELECT MyTable
SCAN
?ALLTRIM(Table_Name)
ENDSCAN
如果想把数库中的表名显示在一个下拉框中
----------------------------------
在表单的INIT事件中:
THISFORM.COMBO1.STYLE=2
THISFORM.COMBO1.ROWSOURCETYPE=6
THISFORM.COMBO1.ROWSOURCE='ALLTRIM(MyTable.Table_Name)'
前提:表单上有控件COMBO1
---------------------------------------------------------------------------------
SELECT name FROM sysobjects WHERE (type = 'U') AND (name <> 'dtproperties')
SELECT name FROM sysobjects WHERE (type = 'V') OR (type = 'P')
type对象类型。可以是下列值之一:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程
奇怪的 dtproperties 表
Posted on 2005-11-30 21:50 Zealot 阅读(1228) 评论(3) 编辑 收藏 所属分类: Database
SQL Server 2000中,当新建一个空的数据库后,在查询分析器中执行
sp_database 或select * from sysobjects where xtype = 'U'
都会得到dtproperties表,并显示为用户表, 可这个表我从没有创建过。但是在企业管理器中,dtproperties却显示为系统表。难道是bug ? 查看dtproperties,里面没有数据,是个空表。在SQL Server联机丛书里没有关于这个表的描述。
dtproperties表在企业管理器中无法删除,但在查询分析器中 执行drop table dtproperties却可以删除。
手工建立一个表,表名就叫dtproperties,然后再查看,在企业管理器中赫然显示为系统表!! 看来Bug是一定的了。
重新创建一个数据库, 写个触发器,让其在dtproperties表执行insert时执行,然后在SQL Server里随意操作,hehe,终于发现,在新建关系图时,dtproperties表被插入数据,看来它是用来存储数据关系图的。 呵呵,想点办法,数据关系图以后也可以备份下来了。
再用drop table dtproperties删除表dtproperties,[手工创建dtproperties ,结构任意,] 然后在企业管理器中新建数据关系图,呵呵,SQL Server报错! 再次证实前面的猜想!
SQL Server 2005中dtproperties 表不存在了,取而代之的是sysdiagram (记不住具体的名称了) ,这个bug也不存在了,SQL Server 2005中的系统表和SQL Server 2000有了很大的不同。
列举SQL SERVER中的数据库名、某一数据库中的表名、某一数据库中表的列名。
*---------------------------------------------------------------
LOCAL loForm
loForm = CREATEOBJECT("Form1")
loForm.Show(1)
DEFINE CLASS Form1 AS Form
Width = 250
Height = 130
MaxButton = .F.
BorderStyle = 2
Caption = "SQL Server"
Server = NULL
ADD OBJECT Label1 AS Label WITH Top = 24, Left = 20, Caption = "Database"
ADD OBJECT Label2 AS Label WITH Top = 54, Left = 20, Caption = "Table"
ADD OBJECT Label3 AS Label WITH Top = 84, Left = 20, Caption = "Column"
ADD OBJECT Combo1 AS ComboBox1 WITH Top = 20, Left = 80, Width = 140, Style = 2
ADD OBJECT Combo2 AS ComboBox2 WITH Top = 50, Left = 80, Width = 140, Style = 2
ADD OBJECT Combo3 AS ComboBox WITH Top = 80, Left = 80, Width = 140, Style = 2
PROCEDURE Init
THIS.Server = CreateObject("SQLDMO.SQLServer")
THIS.Server.Connect("127.0.0.1", "sa", "master")
FOR i = 1 TO THIS.Server.Databases.Count
THIS.Combo1.AddItem(THIS.Server.Databases.Item(i).Name)
ENDFOR
THIS.Combo1.Value = THIS.Combo1.List(1)
THIS.Combo1.InteractiveChange()
ENDPROC
PROCEDURE Destroy
THIS.Server.DisConnect()
ENDPROC
ENDDEFINE
DEFINE CLASS ComboBox1 AS ComboBox
PROCEDURE InteractiveChange
LOCAL loDatabase
loDatabase = THISFORM.Server.Databases(THIS.Value)
THISFORM.Combo2.Clear()
FOR i = 1 TO loDatabase.Tables.Count
THISFORM.Combo2.AddListItem(loDatabase.Tables.Item(i).Name)
ENDFOR
THISFORM.Combo2.Value = THISFORM.Combo2.List(1)
THISFORM.Combo2.InteractiveChange()
ENDPROC
ENDDEFINE
DEFINE CLASS ComboBox2 AS ComboBox
PROCEDURE InteractiveChange
LOCAL loDatabase, loTable
loDatabase = THISFORM.Server.Databases(THISFORM.Combo1.Value)
loTable = loDatabase.Tables(THIS.Value)
THISFORM.Combo3.Clear()
FOR i = 1 TO loTable.Columns.Count
THISFORM.Combo3.AddListItem(loTable.Columns.Item(i).Name)
ENDFOR
THISFORM.Combo3.Value = THISFORM.Combo3.List(1)
ENDPROC
ENDDEFINE