02
2013
08

SQL Server添加 PRIMARY KEY 主键的几种方法

 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AA]
GO

02
2013
08

OPENROWSET访问数据源

 

包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERTUPDATE  DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。

02
2013
08

OPENROWSET与OPENROWSET试用举例

 

 

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\account.xls', ' SELECT * FROM  [sheet1$]')

 -- 从Excel取数据 
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=c:\account.xls',[Sheet1$])

02
2013
08

使用OPENROWSET函数连接并访问远程数据库数据

我们有时候会遇到要访问的数据不只是在本地服务器上,往往另一部分在远程数据库服务器上,比如我们在两个服务器上存放着表结构一样的数据我们要把两数据合并起来一起显示怎么办呢,那么这个时候我们用SQL SERVER提供的OPENROWSET函数了,使用起来很方便,记住像引用表名那样引用OPENROWSET 函数就可以了。

我们可以这样写:
1.SELECT a.* FROM table1 a LEFT JOIN OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=192.168.0.1,2412;UID=sa;PWD=bb',DbName.dbo.table2) AS b ON a.id = b.id ORDER BY a.ID DESC
将地址为192.168.0.1端口为2412SQL SERVER上的table2表和本地服务器上的table1表联接。

2.SELECT * FROM 
SELECT a.* FROM table1 a UNION SELECT b.* FROM OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=192.168.0.1,2412;UID=aa;PWD=bb',DbName.dbo.table2) AS b) TempTable ORDER BY ID DESC
将地址为192.168.0.1端口为2412SQL SERVER上的table2表中内容加到table1表中。

      
上例中我们用的是ODBC OLE DB 提供程序,当然了你还可能用SQL Server  Microsoft OLE DB,Jet  Microsoft OLE DBProvider连接。

使用SQL Server  Microsoft OLE DB:
OPENROWSET
'SQLOLEDB','服务器地址,端口';'用户名';'密码', 'SQL语句')

使用Jet  Microsoft OLE DB:
OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\test.mdb';'admin';'pwd', Orders)

注意:以上两种用户名和密码前都是用分号分隔

02
2013
08

SQL Server中获取计算机的IP地址

 

select serverproperty('ServerName');
select serverproperty('MachineName');
exec master..xp_cmdshell 'nbtstat -an'
select @@servername

go
declare @ip varchar(15)
--得到ip地址
create table #ip(a varchar(200))
insert into #ip exec master..xp_cmdshell 'nbtstat -an'

02
2013
08

SQL Server中 GOTO 用法

 

create table tta (date datetime,status nvarchar(10), num int)
insert into tta select '2007-05-05' ,   N'上期结存',    8    
union select '2007-05-06' ,   N'购入'    ,   10   
union select '2007-05-07' ,   N'调出'    ,   5    
union select '2007-05-08' ,   N'调入'    ,   10   
union select '2007-05-09' ,   N'调出'    ,   15   
--drop table #a

02
2013
08

SQL Server中返回Table类型的函数用法

 

create function f_cid( 
 @ClassName varchar(10) --要查询的类别名(如果类别名会重复,改用NClassID 
)returns @re table(NClassID int,level int) 
as 
begin 
  declare @l int 
  set @l=0 
  insert @re select NClassID,@l 
  from Class 
  where ClassName=@ClassName
  while @@rowcount>0 
  begin 
    set @l=@l+1 
    insert @re select a.NClassID,@l 
    from Class a,@re b 
    where a.ClassID=b.NClassID and b.level=@l-1
  end 
  return 
end 
go 

02
2013
08

SQL Server中以固定符号分割的字符串转换为多行数据

--把 'a','b','c','d' 字符串以逗号为标识分割开,每个一行
declare @s varchar(200)
set @s='''a'',''b'',''c'',''d'''
select @s='select '+replace(@s,',',' union select ')
print @s
exec (@s)

02
2013
08

SQL Server删除一个表中时间区间相重复的记录

 DELETE a  
from DeviceFaultRun a inner join DeviceFaultRun b 
on a.PointID=b.PointID 
where a.StartTime > b.StartTime and a.StartTime < b.EndTime  

02
2013
08

SQL Server转Datetime的各种格式

 


create table #DT (Num nvarchar(20),DateT nvarchar(50))
declare @i as int
set @i=0
declare @sql nvarchar(4000)
set @sql=''
while @i<5000
begin
 set @sql='select ''' +convert(nvarchar,@i) + ''' AS Num, Convert(nvarchar(50),getdate(),'+convert(nvarchar,@i)+') ' + char(13)
 print @sql
 begin try
    insert into #DT exec(@sql)
 end try
 begin catch
 end catch
set @i=@i+1
end