[原创]使用临时表和存储过程实现显示表结构,类似设计功能_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3399 | 回复: 0   主题: [原创]使用临时表和存储过程实现显示表结构,类似设计功能        下一篇 
Robin
注册用户
等级:少校
经验:856
发帖:63
精华:4
注册:2014-3-22
状态:离线
发送短消息息给Robin 加好友    发送短消息息给Robin 发消息
发表于: IP:您无权察看 2014-4-11 13:38:04 | [全部帖] [楼主帖] 楼主   主页

环境介绍

Windows764位+SQLServer2012

SQLServer版本细节

MicrosoftSQLServer2012-11.0.2100.60(X64)
Feb10201219:39:15
Copyright(c)MicrosoftCorporation
EnterpriseEdition:Core-basedLicensing(64-bit)onWindowsNT6.1(Build7601:ServicePack1)


实现功能

显示某张表的详细信息,类似选中表,然后点击设计出现的结果,如图:

北京联动北方科技有限公司

具体实现

IFEXISTS(SELECT*fromtempdb..sysobjectsWHEREid=object_id(N'tempdb..#temp')andtype='U')
--判断临时表是否存在
DROPTABLE#temp;
ELSE
--创建临时表
CREATETABLE#temp
(
TABLE_QUALIFIERsysname,
TABLE_OWNERsysname,
TABLE_NAMEsysname,
COLUMN_NAMEsysname,
DATA_TYPEsmallint,
TYPE_NAMEsysname,
PRECISIONint,
LENGTHint,
SCALEsmallint,
RADIXsmallint,
NULLABLEsmallint,
REMARKSvarchar(254),
COLUMN_DEFnvarchar(4000),
SQL_DATA_TYPEsmallint,
SQL_DATETIME_SUBsmallint,
CHAR_OCTET_LENGTHint,
ORDINAL_POSITIONint,
IS_NULLABLEvarchar(254),
SS_DATA_TYPEtinyint,
);
GO
--将存储过程的结果存入临时表,Puzzle为表名
INSERTINTO#tempEXECsp_columnsPuzzle;
GO
--获得结果,并作格式优化


SELECTCOLUMN_NAMEAS[列名],TYPE_NAME+'('+CAST(PRECISIONASVARCHAR)+')'AS[数据类型],CASEWHENNULLABLE=1THEN'允许'ELSE'不允许'ENDAS[允许NULL值]FROM#temp;

GO


小结

个人认为这种查看表结构的方法意义不大。但有这种需求,就试着做了下。其中有几个细节可以借鉴。第一是临时表的创建,使用了vim进行格式处理;第二是可以将存储过程返回的结果存入到表;第三是格式上CAST的用法和CASE…WHEN的用法。

该贴被Robin编辑于2014-4-11 13:38:50

该贴由hui.chen转至本版2014-11-5 16:22:25




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论