`
seawavenews
  • 浏览: 230290 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

整理了一些t-sql技巧

阅读更多
   
标题   整理了一些t-sql技巧      选择自 kingwkb 的 Blog
关键字   整理了一些t-sql技巧
出处  
 

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

 

select top 0 * into [t1] from [t2]


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

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

if exists(select 1 from sysobjects where id=object_id('fgetscript'and objectproperty(id,'IsInlineFunction')=0)
 
drop function fgetscript
go

create function fgetscript(
 
@servername varchar(50)     --服务器名
 ,@userid varchar(50)='sa'    --用户名,如果为nt验证方式,则为空
 ,@password varchar(50)=''    --密码
 ,@databasename varchar(50)    --数据库名称
 ,@objectname varchar(250)    --对象名

returns varchar(8000)
as
begin
 
declare @re varchar(8000)        --返回脚本
 declare @srvid int,@dbsid int       --定义服务器、数据库集id
 declare @dbid int,@tbid int        --数据库、表id
 declare @err int,@src varchar(255), @desc varchar(255--错误处理变量

--创建sqldmo对象
 exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
 
if @err<>0 goto lberr

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

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

 
if @err<>0 goto lberr

--获取数据库集
 exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
 
if @err<>0 goto lberr

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

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

--取得脚本
 exec @err=sp_oamethod @tbid,'script',@re output
 
if @err<>0 goto lberr

 
--print @re
 return(@re)

lberr:
 
exec sp_oageterrorinfo NULL@src out, @desc out 
 
declare @errb varbinary(4)
 
set @errb=cast(@err as varbinary(4))
 
exec master..xp_varbintohexstr @errb,@re out
 
set @re='错误号: '+@re
   
+char(13)+'错误源: '+@src
   
+char(13)+'错误描述: '+@desc
 
return(@re)
end
go

2、 用法如下
用法如下,

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

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

declare @name varchar(250)
declare #aa cursor for
 
select name from sysobjects where xtype not in('S','PK','D','X','L')
open #aa
fetch next from #aa into @name
while @@fetch_status=0
begin
 
print dbo.fgetscript('onlytiancai','sa','sa','database',@name)
 
fetch next from #aa into @name
end
close #aa
deallocate #aa

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

create function getstrarrlength (@str varchar(8000))
returns int
as
begin
  
declare @int_return int
  
declare @start int
  
declare @next int
  
declare @location int
  
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、 获取指定索引的值的函数

create function getstrofindex (@str varchar(8000),@index int =0)
returns varchar(8000)
as
begin
  
declare @str_return varchar(8000)
  
declare @start int
  
declare @next int
  
declare @location int
  
select @start =1
  
select @next =1 --如果习惯从0开始则select @next =0
  select @location = charindex(',',@str,@start)
  
while (@location <>0 and @index > @next )
  
begin
    
select @start = @location +1
    
select @location = charindex(',',@str,@start)
    
select @next =@next +1
  
end
  
if @location =0 select @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 * from OPENDATASOURCE('SQLOLEDB','Data Source=远程ip;User ID=sa;Password=密码').库名.dbo.表名

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

EXEC sp_addlinkedserver '别名
分享到:
评论

相关推荐

    SQL技巧全集-整理

    4. **T-SQL技巧**:T-SQL(Transact-SQL)是Microsoft SQL Server的扩展,包含了一系列特有的语言元素。例如,存储过程、触发器、游标、事务管理以及动态SQL等。T-SQL的CASE表达式允许条件判断,WHILE循环用于重复...

    T-SQL语句集合

    根据提供的文件信息,我们可以整理出一系列关于T-SQL的重要知识点,包括数据库的创建与删除、表的操作、视图管理以及查询技巧等。 ### 数据库操作 #### 创建数据库 ```sql IF EXISTS (SELECT * FROM sys.databases...

    2009 年度十大 SQL Server 技巧文章

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

    Sql Server实用操作小技巧集合(一).txt

    本文档提供了一些 SQL Server 中常用的实用操作技巧,包括检查和优化表的碎片化程度、解决安装过程中遇到的问题、查询 SQL Server 版本以及处理数据库迁移等。这些技巧对于提高数据库性能和管理效率非常有帮助。在...

    SQL SERVER实用经验技巧集

    以下是一些关于SQL Server的实用经验技巧: 1. **处理挂起的安装操作** 当安装SQL Server或应用Service Pack时,有时会遇到提示有挂起的安装操作。解决这个问题的方法是通过注册表进行清理。具体操作是进入`HKEY_...

    SQL Server学习教程

    此外,学习T-SQL编程和使用高级查询技巧,如联接、子查询和窗口函数,对于高效的数据处理至关重要。 4. 用户权限与管理:在SQL Server中,权限管理涉及登录、用户、角色和权限的创建与分配。理解安全性模型,如固定...

    SQL数据库参考答案(A卷)doc文档合集整理.zip

    【SQL数据库参考答案(A卷)doc文档合集整理.zip】这个压缩包文件主要包含了与SQL数据库相关的学习资料,特别是针对SQL数据库的参考答案,可能是某次考试或练习的解答集合。文档格式为.doc,通常用于存储文字信息,...

    SQL Server数据库操作实用技巧锦集

    在SQL Server数据库管理中,掌握一些实用技巧能显著提高工作效率和数据库性能。以下是一些关键操作的详细说明: 1. **挂起操作处理**:在安装SQL Server或Service Pack时,有时会出现提示有未完成的挂起操作。解决...

    sql2000电子教案

    2. 内建函数:了解T-SQL中的各种内建函数,如字符串函数、数学函数、日期时间函数等。 3. 自定义函数:创建用户自定义函数,扩展SQL Server的功能。 六、事务与并发控制 1. 事务:理解ACID属性,学习如何在SQL ...

    数据库使用技巧

    本篇文章将深入探讨“数据库使用技巧”,并结合提供的“Transact-SQL语句使用技巧大全”来阐述相关知识。 一、数据库基础概念 数据库(Database)是一种组织和存储数据的系统,它允许用户以结构化方式访问、管理和...

    SQL Server 2005 系列课程-

    它支持T-SQL(Transact-SQL)语言,这是一种用于执行SQL语句、控制数据库对象和管理事务的扩展SQL。在SQL Server 2005中,引入了新的数据类型,如datetime2和varchar(max),增强了性能和可扩展性。 三、SQL Server ...

    c#,java,html,sqlsever记笔记软件

    描述中提到的"有我自己的一些SQL Server笔记,可自己写笔记"意味着这个压缩包可能包含了个人对SQL Server数据库管理系统的理解、实践经验以及一个可以用来创建和编辑笔记的平台。 首先,让我们从C#开始。C#是一种由...

    基4于sql_server_mobile移动数据库的应用[整理].pdf

    使用Transact-SQL(T-SQL)命令,开发人员可以进行数据操作,如INSERT、UPDATE和DELETE。 四、数据同步 在移动设备上,离线工作模式是常见的需求。SQL Server Mobile支持双向同步,允许设备在有网络连接时与服务器...

    SQL Server查询优化

    11. **T-SQL编写技巧**:编写高效的T-SQL代码,比如避免全表扫描,使用JOIN替代子查询,减少嵌套循环,合理使用临时表和变量,以及利用存储过程等。 以上策略只是SQL Server查询优化的一部分,实际应用中还需要结合...

    最常用的sql查询整理

    SQL(Structured Query Language)是用于管理和操作关系数据库的语言。在这个主题中,我们将深入探讨最...无论你是数据库管理员、数据分析师还是软件开发者,熟悉并熟练使用这些SQL查询技巧都将大大提高你的工作效率。

    sql server优化

    T-SQL编写技巧 - **查询计划与优化**:了解SQL Server如何处理查询计划,包括词法和语法检查、代数优化、存取路径优化等,有助于编写更高效的T-SQL代码。 - **数据结构理解**:熟悉SQL Server的数据存储结构,如页...

    SQL 2005性能优化50条 转发

    12. **T-SQL编写技巧**:理解查询优化过程,了解数据的存储结构,比如页大小、盘区和B树结构,这对于编写高效的T-SQL至关重要。 13. **事务管理**:正确使用`commit`和`rollback`,避免在动态SQL中直接包含事务,...

Global site tag (gtag.js) - Google Analytics