`
sogotobj
  • 浏览: 620955 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

整理了一些t-sql技巧

阅读更多

整理了一些t-sql技巧

选择自 kingwkb 的 Blog

一、只复制一个表结构,不复制数据

selecttop0*into[t1]from[t2]


二、获取数据库中某个对象的创建脚本

1、先用下面的脚本创建一个函数

ifexists(select1fromsysobjectswhereid=object_id('fgetscript')andobjectproperty(id,'IsInlineFunction')=0)
dropfunctionfgetscript
go

createfunctionfgetscript(
@servernamevarchar(50)--服务器名
,@useridvarchar(50)='sa'--用户名,如果为nt验证方式,则为空
,@passwordvarchar(50)=''--密码
,@databasenamevarchar(50)--数据库名称
,@objectnamevarchar(250)--对象名

)
returnsvarchar(8000)
as
begin
declare@revarchar(8000)--返回脚本
declare@srvidint,@dbsidint--定义服务器、数据库集id
declare@dbidint,@tbidint--数据库、表id
declare@errint,@srcvarchar(255),@descvarchar(255)--错误处理变量

--创建sqldmo对象
exec@err=sp_oacreate'sqldmo.sqlserver',@srvidoutput
if@err<>0gotolberr

--连接服务器
ifisnull(@userid,'')=''--如果是Nt验证方式
begin
exec@err=sp_oasetproperty@srvid,'loginsecure',1
if@err<>0gotolberr

exec@err=sp_oamethod@srvid,'connect',null,@servername
end
else
exec@err=sp_oamethod@srvid,'connect',null,@servername,@userid,@password

if@err<>0gotolberr

--获取数据库集
exec@err=sp_oagetproperty@srvid,'databases',@dbsidoutput
if@err<>0gotolberr

--获取要取得脚本的数据库id
exec@err=sp_oamethod@dbsid,'item',@dbidoutput,@databasename
if@err<>0gotolberr

--获取要取得脚本的对象id
exec@err=sp_oamethod@dbid,'getobjectbyname',@tbidoutput,@objectname
if@err<>0gotolberr

--取得脚本
exec@err=sp_oamethod@tbid,'script',@reoutput
if@err<>0gotolberr

--print@re
return(@re)

lberr:
execsp_oageterrorinfoNULL,@srcout,@descout
declare@errbvarbinary(4)
set@errb=cast(@errasvarbinary(4))
execmaster..xp_varbintohexstr@errb,@reout
set@re='错误号:'+@re
+char(13)+'错误源:'+@src
+char(13)+'错误描述:'+@desc
return(@re)
end
go

2、用法如下
用法如下,

printdbo.fgetscript('服务器名','用户名','密码','数据库名','表名或其它对象名')

3、如果要获取库里所有对象的脚本,如如下方式

declare@namevarchar(250)
declare#aacursorfor
selectnamefromsysobjectswherextypenotin('S','PK','D','X','L')
open#aa
fetchnextfrom#aainto@name
while@@fetch_status=0
begin
printdbo.fgetscript('onlytiancai','sa','sa','database',@name)
fetchnextfrom#aainto@name
end
close#aa
deallocate#aa

4、声明,此函数是csdn邹建邹老大提供的
三、分隔字符串
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?因为t-sql里没有split函数,也没有数组的概念,所以只能自己写几个函数了。
1、获取元素个数的函数

createfunctiongetstrarrlength(@strvarchar(8000))
returnsint
as
begin
declare@int_returnint
declare@startint
declare@nextint
declare@locationint
select@str=','+@str+','
select@str=replace(@str,',,',',')
select@start=1
select@next=1
select@location=charindex(',',@str,@start)
while(@location<>0)
begin
select@start=@location+1
select@location=charindex(',',@str,@start)
select@next=@next+1
end
select@int_return=@next-2
return@int_return
end

2、获取指定索引的值的函数

createfunctiongetstrofindex(@strvarchar(8000),@indexint=0)
returnsvarchar(8000)
as
begin
declare@str_returnvarchar(8000)
declare@startint
declare@nextint
declare@locationint
select@start=1
select@next=1--如果习惯从0开始则select@next=0
select@location=charindex(',',@str,@start)
while(@location<>0and@index>@next)
begin
select@start=@location+1
select@location=charindex(',',@str,@start)
select@next=@next+1
end
if@location=0select@location=len(@str)+1--如果是因为没有逗号退出,则认为逗号在字符串后
select@str_return=substring(@str,@start,@location-@start)--@start肯定是逗号之后的位置或者就是初始值1
if(@index<>@next)select@str_return=''--如果二者不相等,则是因为逗号太少,或者@index小于@next的初始值1。
return@str_return
end

3、测试

SELECT[dbo].[getstrarrlength]('1,2,3,4,a,b,c,d')
SELECT[dbo].[getstrofindex]('1,2,3,4,a,b,c,d',5)

四、一条语句执行跨越若干个数据库
我要在一条语句里操作不同的服务器上的不同的数据库里的不同的表,怎么办呢?
第一种方法:

select*fromOPENDATASOURCE('SQLOLEDB','DataSource=远程ip;UserID=sa;Password=密码').库名.dbo.表名

第二种方法:
先使用联结服务器:

EXECsp_addlinkedserver'别名','','MSDASQL',NULL,NULL,'DRIVER={SQLServer};SERVER=远程名;UID=用户;PWD=密码;'
execsp_addlinkedsrvlogin@rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO

然后你就可以如下:

select*from别名.库名.dbo.表名
insert库名.dbo.表名select*from别名.库名.dbo.表名
select*into库名.dbo.新表名from别名.库名.dbo.表名
go

五、怎样获取一个表中所有的字段信息
蛙蛙推荐:怎样获取一个表中所有字段的信息
先创建一个视图

Createviewfielddesc
as
selecto.nameastable_name,c.nameasfield_name,t.nameas<span
分享到:
评论

相关推荐

    自己开发整理的T-SQL语句

    工作中常用的T-SQL语句,超详细。内含解释说明,使用技巧和运用规则,方便开发时随时查阅。

    SQL技巧全集-整理

    整理的SQL技巧全集,包括SQL操作大全,SQL时间显示的不同方式,随机函数,T-SQL技巧等等。。。

    2009 年度十大 SQL Server 技巧文章

    在这种情况下,你可以在T-SQL(Transact-SQL,微软对SQL的扩展)中用OPENROWSET函数给数据源传入一个连接串和查询来提取需要的数据。  使用SQL Server的OPENROWSET函数(上)  使用SQL Server的OPENROWSET函数...

    SQLServer2008查询性能优化 2/2

    实施修复甚至预防性能问题的T-SQL最佳实践 《SQL Server 2008查询性能优化》不是理论书籍,它的目的是帮助你避免数据库出现性能低下的状况,它还能帮助你保住你的工作。 内容提要 《SQL Server 2008查询性能优化...

    SQLServer2008查询性能优化 1/2

    实施修复甚至预防性能问题的T-SQL最佳实践 《SQL Server 2008查询性能优化》不是理论书籍,它的目的是帮助你避免数据库出现性能低下的状况,它还能帮助你保住你的工作。 内容提要 《SQL Server 2008查询性能优化...

    电脑快捷方式

    cliconfg-------SQLSERVER客户端网络实用程序 clipbrd--------剪贴板查看器 control--------打开控制面板 conf-----------启动netmeeting compmgmt.msc---计算机管理 cleanmgr-------垃圾整理 ciadv.msc...

    vc源代码合集0951.rar

    2012-06-12 11:43 34,816 用sql实现查询重复记录的代码.doc 2012-06-12 13:05 41,472 用VC++实现USB接口读写数据的程序.doc 2012-06-12 12:22 3,939 用邻接矩阵表示的图的深度优先搜索和广度优先搜索.txt 2012-06-12...

    Toad 使用快速入门

    SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...

    网管教程 从入门到精通软件篇.txt

    Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...

    Delphi 6集成开发环境

    2.4 方法与技巧................................................67 2.4.1 设置代码模板................................67 2.4.2 设置提示信息................................68 2.5 本章小结....................

Global site tag (gtag.js) - Google Analytics