仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 804|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之几个SQL Server语句和存储历程

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用server|存储历程|语句--======================================================
--列出SQLSERVER一切表,字段名,主键,范例,长度,小数位数等信息
--在查询剖析器里运转便可,能够天生一个表,导出到EXCEL中
--======================================================
SELECT
(casewhena.colorder=1thend.nameelseend)表名,
a.colorder字段序号,
a.name字段名,
(casewhenCOLUMNPROPERTY(a.id,a.name,IsIdentity)=1then√elseend)标识,
(casewhen(SELECTcount(*)
FROMsysobjects
WHERE(namein
(SELECTname
FROMsysindexes
WHERE(id=a.id)AND(indidin
(SELECTindid
FROMsysindexkeys
WHERE(id=a.id)AND(colidin
(SELECTcolid
FROMsyscolumns
WHERE(id=a.id)AND(name=a.name)))))))AND
(xtype=PK))>0then√elseend)主键,
b.name范例,
a.length占用字节数,
COLUMNPROPERTY(a.id,a.name,PRECISION)as长度,
isnull(COLUMNPROPERTY(a.id,a.name,Scale),0)as小数位数,
(casewhena.isnullable=1then√elseend)同意空,
isnull(e.text,)默许值,
isnull(g.[value],)AS字段申明

FROMsyscolumnsaleftjoinsystypesb
ona.xtype=b.xusertype
innerjoinsysobjectsd
ona.id=d.idandd.xtype=Uandd.namedtproperties
leftjoinsyscommentse
ona.cdefault=e.id
leftjoinsyspropertiesg
ona.id=g.idANDa.colid=g.smallid
orderbya.id,a.colorder
-------------------------------------------------------------------------------------------------






列出SQLSERVER一切表、字段界说,范例,长度,一个值等信息
并导出到Excel中
--======================================================
--Exportallusertablesdefinitionandonesamplevalue
--jan-13-2003,Dr.Zhang
--======================================================
在查询剖析器里运转:
SETANSI_NULLSOFF
GO
SETNOCOUNTON
GO

SETLANGUAGESimplifiedChinese
go
DECLARE@tblnvarchar(200),@fldnvarchar(200),@sqlnvarchar(4000),@maxlenint,@samplenvarchar(40)

SELECTd.nameTableName,a.nameFieldName,b.nameTypeName,a.lengthLength,a.isnullableIS_NULLINTO#t
FROMsyscolumnsa,systypesb,sysobjectsd
WHEREa.xtype=b.xusertypeanda.id=d.idandd.xtype=U

DECLAREread_cursorCURSOR
FORSELECTTableName,FieldNameFROM#t

SELECTTOP1_TableNameTableName,
FieldNameFieldName,TypeNameTypeName,
LengthLength,IS_NULLIS_NULL,
MaxLenUsedASMaxLenUsed,SampleValueSample,
CommentCommentINTO#tcFROM#t

OPENread_cursor

FETCHNEXTFROMread_cursorINTO@tbl,@fld
WHILE(@@fetch_status-1)---failes
BEGIN
IF(@@fetch_status-2)--Missing
BEGIN
SET@sql=NSET@maxlen=(SELECTmax(len(cast(+@fld+asnvarchar)))FROM+@tbl+)
--PRINT@sql
EXECSP_EXECUTESQL@sql,N@maxlenintOUTPUT,@maxlenOUTPUT
--print@maxlen
SET@sql=NSET@sample=(SELECTTOP1cast(+@fld+asnvarchar)FROM+@tbl+WHERElen(cast(+@fld+asnvarchar))=+convert(nvarchar(5),@maxlen)+)
EXECSP_EXECUTESQL@sql,N@samplevarchar(30)OUTPUT,@sampleOUTPUT
--forquickly
--SET@sql=NSET@sample=convert(varchar(20),(SELECTTOP1+@fld+FROM+
--@tbl+orderby1desc))
PRINT@sql
print@sample
print@tbl
EXECSP_EXECUTESQL@sql,N@samplenvarchar(30)OUTPUT,@sampleOUTPUT
INSERTINTO#tcSELECT*,ltrim(ISNULL(@maxlen,0))asMaxLenUsed,
convert(nchar(20),ltrim(ISNULL(@sample,)))asSample,CommentFROM#twhereTableName=@tblandFieldName=@fld
END
FETCHNEXTFROMread_cursorINTO@tbl,@fld
END

CLOSEread_cursor
DEALLOCATEread_cursor
GO

SETANSI_NULLSON
GO
SETNOCOUNTOFF
GO
selectcount(*)from#t
DROPTABLE#t
GO

selectcount(*)-1from#tc

select*into##txfrom#tcorderbytablename
DROPTABLE#tc

--select*from##tx

declare@dbnvarchar(60),@sqlnvarchar(3000)
set@db=db_name()
--请修正用户名和口令导出到Excel中
set@sql=execmaster.dbo.xp_cmdshellbcp..dbo.##txoutc:+@db+_exp.xls-w-C936-Usa-Psa
print@sql
exec(@sql)
GO
DROPTABLE##tx
GO



--======================================================
--依据表中数据天生insert语句的存储历程
--创建存储历程,实行spGenInsertSQL表名
--感激playyuer
--======================================================
CREATEprocspGenInsertSQL(@tablenamevarchar(256))

as
begin
declare@sqlvarchar(8000)
declare@sqlValuesvarchar(8000)
set@sql=(
set@sqlValues=values(+
select@sqlValues=@sqlValues+cols++,+,@sql=@sql+[+name+],
from
(selectcase
whenxtypein(48,52,56,59,60,62,104,106,108,122,127)
thencasewhen+name+isnullthenNULLelse+cast(+name+asvarchar)+end
whenxtypein(58,61)
thencasewhen+name+isnullthenNULLelse+++cast(+name+asvarchar)+++end
whenxtypein(167)
thencasewhen+name+isnullthenNULLelse+++replace(+name+,,)+++end
whenxtypein(231)
thencasewhen+name+isnullthenNULLelse+N++replace(+name+,,)+++end
whenxtypein(175)
thencasewhen+name+isnullthenNULLelse+++cast(replace(+name+,,)asChar(+cast(lengthasvarchar)+))++end
whenxtypein(239)
thencasewhen+name+isnullthenNULLelse+N++cast(replace(+name+,,)asChar(+cast(lengthasvarchar)+))++end
elseNULL
endasCols,name
fromsyscolumns
whereid=object_id(@tablename)
)T
set@sql=selectINSERTINTO[+@tablename+]+left(@sql,len(@sql)-1)+)+left(@sqlValues,len(@sqlValues)-4)+)from+@tablename
--print@sql
exec(@sql)
end

GO



--======================================================
--依据表中数据天生insert语句的存储历程
--创建存储历程,实行proc_insert表名
--感激Sky_blue
--======================================================

CREATEprocproc_insert(@tablenamevarchar(256))
as
begin
setnocounton
declare@sqlstrvarchar(4000)
declare@sqlstr1varchar(4000)
declare@sqlstr2varchar(4000)
select@sqlstr=selectinsert+@tablename
select@sqlstr1=
select@sqlstr2=(
select@sqlstr1=values(+
select@sqlstr1=@sqlstr1+col++,+,@sqlstr2=@sqlstr2+name+,from(selectcase
--whena.xtype=173thencasewhen+a.name+isnullthenNULLelse+convert(varchar(+convert(varchar(4),a.length*2+2)+),+a.name+)+end
whena.xtype=104thencasewhen+a.name+isnullthenNULLelse+convert(varchar(1),+a.name+)+end
whena.xtype=175thencasewhen+a.name+isnullthenNULLelse+++replace(+a.name+,,)+++end
whena.xtype=61thencasewhen+a.name+isnullthenNULLelse+++convert(varchar(23),+a.name+,121)+++end
whena.xtype=106thencasewhen+a.name+isnullthenNULLelse+convert(varchar(+convert(varchar(4),a.xprec+2)+),+a.name+)+end
whena.xtype=62thencasewhen+a.name+isnullthenNULLelse+convert(varchar(23),+a.name+,2)+end
whena.xtype=56thencasewhen+a.name+isnullthenNULLelse+convert(varchar(11),+a.name+)+end
whena.xtype=60thencasewhen+a.name+isnullthenNULLelse+convert(varchar(22),+a.name+)+end
whena.xtype=239thencasewhen+a.name+isnullthenNULLelse+++replace(+a.name+,,)+++end
whena.xtype=108thencasewhen+a.name+isnullthenNULLelse+convert(varchar(+convert(varchar(4),a.xprec+2)+),+a.name+)+end
whena.xtype=231thencasewhen+a.name+isnullthenNULLelse+++replace(+a.name+,,)+++end
whena.xtype=59thencasewhen+a.name+isnullthenNULLelse+convert(varchar(23),+a.name+,2)+end
whena.xtype=58thencasewhen+a.name+isnullthenNULLelse+++convert(varchar(23),+a.name+,121)+++end
whena.xtype=52thencasewhen+a.name+isnullthenNULLelse+convert(varchar(12),+a.name+)+end
whena.xtype=122thencasewhen+a.name+isnullthenNULLelse+convert(varchar(22),+a.name+)+end
whena.xtype=48thencasewhen+a.name+isnullthenNULLelse+convert(varchar(6),+a.name+)+end
--whena.xtype=165thencasewhen+a.name+isnullthenNULLelse+convert(varchar(+convert(varchar(4),a.length*2+2)+),+a.name+)+end
whena.xtype=167thencasewhen+a.name+isnullthenNULLelse+++replace(+a.name+,,)+++end
elseNULL
endascol,a.colid,a.name
fromsyscolumnsawherea.id=object_id(@tablename)anda.xtype189anda.xtype34anda.xtype35anda.xtype36
)torderbycolid

select@sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+)+left(@sqlstr1,len(@sqlstr1)-3)+)from+@tablename
--print@sqlstr
exec(@sqlstr)
setnocountoff
end
GO


你看出了作者的深度?深处半米!当初是冲那么多的大牛给他写序才买的,后来才发现无啥内容,作者也只是才用几年的新手,百花了几十两银子,再次感叹当今社会的虚伪与浮躁
再见西城 该用户已被删除
沙发
发表于 2015-1-19 09:44:48 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
小妖女 该用户已被删除
板凳
发表于 2015-1-27 12:58:15 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
柔情似水 该用户已被删除
地板
发表于 2015-2-5 09:46:29 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
第二个灵魂 该用户已被删除
5#
发表于 2015-2-11 08:56:56 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
再现理想 该用户已被删除
6#
发表于 2015-3-2 07:48:31 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
海妖 该用户已被删除
7#
发表于 2015-3-11 03:10:59 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
飘灵儿 该用户已被删除
8#
发表于 2015-3-17 19:33:06 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
变相怪杰 该用户已被删除
9#
发表于 2015-3-24 22:47:38 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 20:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表