T-sql技巧
来源:互联网 发布:照片无缝拼接软件 编辑:程序博客网 时间:2024/04/29 14:15
1.只复制一个表结构,不复制数据:
select top 0 * into [t1] from [t2]
2. 分隔字符串:
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?
a.获取元素个数的函数
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
b.获取指定索引的值的函数:
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
c.测试
SELECT [dbo].[getstrarrlength]('1,2,3,4,a,b,c,d')
SELECT [dbo].[getstrofindex]('1,2,3,4,a,b,c,d',5)
3.一条语句执行跨越若干个数据库:
要在一条语句里操作不同的服务器上的不同的数据库里的不同的表,怎么办呢?
第一种方法:
select * from OPENDATASOURCE('SQLOLEDB','Data Source=远程ip;User ID=sa;Password=密码').库名.dbo.表名
第二种方法:
先使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
4.怎样获取一个表中所有的字段信息
先创建一个视图
Create view fielddesc
as
select o.name as table_name,c.name as field_name,t.name as type,c.length as
length,c.isnullable as isnullable,convert(varchar(30),p.value) as desp
from syscolumns c
join systypes t on c.xtype = t.xusertype
join sysobjects o on o.id=c.id
left join sysproperties p on p.smallid=c.colid and p.id=o.id
where o.xtype='U'
查询
Select * from fielddesc where table_name = '你的表名'
- T-SQL技巧
- T-sql技巧
- t-sql技巧
- 一些t-sql技巧
- 常用T-Sql技巧
- 一些t-sql技巧
- t-sql常用技巧
- t-sql技巧
- t-sql技巧
- t-sql技巧
- 一些t-sql技巧
- 一些t-sql技巧
- T-sql技巧集
- [转] T-SQL技巧
- t-SQL技巧
- 一些T-sql技巧
- t-sql技巧
- [DataBase]一些t-sql技巧
- Java里读取属性文件例子
- ATL 提供了2个智能指针的模板包装类CComPtr 和 CComQIPtr
- 求人不如求自己
- 大家有给朋友借钱的经历吗?
- Appfuse开发指南
- T-sql技巧
- 关于借钱问题我的经历
- 《紫川》之远东战火 十六卷
- 《紫川》之远东战火 十七卷
- 我的ON BEACH生活 ———捡贝壳(二)
- 程序员四大忌
- 美女 耐老的才是本事
- 自信才显得美
- MSN Messenger协议