‘sql server’ 分类下的所有文章
2010十月1

SQL SERVER 组与注册

sql server 评论关闭

1,客户端连接服务器
在新建注册的时候,可连两个,一个是服务器的别名(局域网使用),一个是IP指定。一般远程的通过IP指定来完成。若想连接多个,在客户端网络实用工具:别名–添加–指定服务器别名,选TCP/IP指定服务器IP,之后注册时就可通过此别名来连接服务器。
2,服务器建立注册也可建立两个,一个是localhost(同本机名),一个是IP,不过都相当于同一个。Sql Server服务管理器服务器可注册的任一个即可,因为都是同一个。即:服务端只能对外提供一个实例(除非装两个Sql Server), 在Sql Server服务管理器指定是哪个。

2010十月1

存储过程不能用Select top @i from table1的解决方法

sql server 评论关闭
declare   @i   int
set   @i=1
select top @i, * from table1
在存储过程中得不到执行,因为top时后面只能是常量。

可用:
 declare   @i   int
set   @i=1
set  rowcount @i
select * from table1
set rowcount = 0

rowcount:指定查询返回的记录条数,使命令的处理在响应指定的行数之后停止处理命令
set  rowcount @i
select * from table1  相当于 select top 1 from table1
set rowcount = 0 取消指定
2010十月1

SqlServer常用的存储过程

sql server 评论关闭

?
1,查看数据库的版本
select @@version

2,查看数据库所在机器操作系统参数
exec master..xp_msver
查看数据库启动的参数
sp_configure
查看数据库启动时间
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
查看所有数据库名称及大小
sp_helpdb
查看所有数据库用户登录信息
sp_helplogins
3,.查看某数据库下某个数据对象的大小
sp_spaceused @objname

4,查看数据库里所有的存储过程和函数
use @database_name
sp_stored_procedures

sp_help 查看表结构, 存储过程实参

5,查看存储过程和函数的源代码
sp_helptext ‘@procedure_name’

或者OBJECT_DEFINITION(object_id(‘sys.sysobjects’))
或者select * from sys.system_sql_modules
where object_id = object_id(‘sys.sysobjects’)

6,查看数据库里用户和进程的信息
sp_who
查看SQL Server数据库里的活动用户和进程的信息
sp_who ‘active’
看进程正在执行的SQL语句:
dbcc inputbuffer (51) 51为进程号

7,查看SQL Server数据库里的锁的情况
sp_lock
进程号1–50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程。spid是进程编号,dbid是数据库编号,objid是数据对象编号

2010十月1

SqlServer系统函数

sql server 评论关闭

1,@@SERVERNAME 返回运行 Microsoft? SQL Server? 的本地服务器名称。

2,@@SERVICENAME 返回 Microsoft? SQL Server? 正在其下运行的注册表键名,SQL Server 作为名为 MSSQLServer 的服务在 Microsoft Windows NT? 上运行

3,
?HOST_ID() –主机编号
?HOST_NAME()–主机名
?DB_ID(‘master’) –数据库编号
?DB_NAME(1)????? –数据库名称
?OBJECT_ID(‘sysobjects’)? –数据库对象编号
?File_ID(‘master’)??????? –返回该逻辑文件名的编号
?File_NAME(1)????????????? –返回该文件编号的逻辑文件名
?FILEGROUP_ID(‘primary’)???? –返回文件组编号
?FILEGROUP_NAME(1)?????????? –返回文件组名称

4, COL_NAME(OBJECT_ID(‘sysobjects’),1)? –表中列的名称,每个表中列是从…n顺序编号
?????? INDEX_COL(‘sysobjects’,1,1)?? –返回sysobjects中第一个索引第一个键的名称
?????? APP_NAME() –返回当前使用的工具名称,如:SQL 查询分析器
? ? ? @@SPID????? –返回当前连接在SQL SERVER中的编号
?? ?? @@PROCID??? –在SP中使用,查看自己的ID
????? Suser_Sid()????? –返回登录的SID,可传参,默认返回当前值
????? Suser_Sname()??? –返回登录的名称,可传参,默认返回当前值
????? System_User????? –等价于不带参数的SUER_SNAME()
????? User_Id()????????? –返回数据库用户ID,可传参,默认返回当前值
?? ?? User_Name()?????? –返回数据库用户名,可传参,默认返回当前值
? ? ? User??????????????? –等价于不带参数的USER_NAME()
?? ?? Current_User????? –等价于不带参数的USER_NAME()
????? Session_User????? –等价于不带参数的USER_NAME()

5,
获取长度
DATALENGTH(‘s我s’) –返回表达式占用的字节数
COL_LENGTH(‘sysobjects’,'name’) –返回列的定义长度(byte)
日期时间转换为字符串

6,
日期时间转换为字符串
convert(varchar(20),getdate(),120)

7,@@IDENTITY ????? 始终返回当前会话最后的标识值

2010十月1

SqlServer系统表与一些属性

sql server 评论关闭

系统表的作用:用户自定义的表对自己填充的数据进行操作。而对sql server来说,用户自定义的表就相当于为系统表填充的数据,故用系统表来操作用户数据库,
数据表,存储过程等数据。 系统表操作用户自定义表,用户自定义表操作外来的数据。

1,sysobjects表:万物皆对象,这是一个系统对象表。表,存储过程,触发器都是对象,都存在此表内。此表用crdate 等保存 对象的创建日期。
查找用户表: select *?? from sysobjects where xtype = ‘U’ AND status >0
??????? 因dtproperties虽是系统表,但类型为’U', 但status为负数,故得到纯净的用户表时要将其除去。dtproperties这个表里保存的是关系图
查存储过程: select *?? from sysobjects where xtype = ‘P’
注:Type是在SQL SERVER 6.0就有的,xType在SQL SERVER 7.0才出现,Type的保留只是为了向后兼容。
?????
?????? 相关函数:object_id(‘mytable’),查出对象名在sysobjects表中的id值
??????????????????????? object_id ( object_id ), 据id查出对象名

2,sys.servers 查看所有本地服务器及链接服务器 select * from master..sysservers 该表只存储在 master 数据库中。

3,sys.databases 查询非sa创建的所有数据库 select * from master..sysdatabases 该表只存储在 master 数据库中。

4, sys.columns 获取表或视图的所有字段,存储过程或函数的所有参数 select name from syscolumns where id=object_id(‘表名’)

5,sys.indexes 数据库中的每个索引。

6, sys.logins? 每个登录帐户在表中占一行。

7,?? sys.processes 数据库进程信息 ,只存储在 master 数据库中。
?? 查看用户进程信息 select spid,uid,syslogins.name,login_time,net_address from sysprocesses,syslogins where sys.processes.sid=syslogins.sid

8,sysdepends? 查看与某一个表相关的视图、存储过程、函数? select * from sysdepends where depid=object_id(‘表名’)

9,sysmessages SQL SERVER返回的内部错误都有在这里,可自行修改,当错误发生时显示自己指示的信息。

10,sysfiles 保存当前数据库所在文件大小,路径等信息。

11,INFORMATION_SCHEMA 当前数据库的每个 CHECK 约束在该视图中占一行。该信息架构视图返回当前用户对其拥有权限的对象的有关信息。
?????? 查询某个表的哪些字段不允许为空
??????????? select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE=’NO’ and TABLE_NAME=’bdorder’

2010十月1

好的SQL语句

sql server 评论关闭
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1 <>1
法二:select top 0 * into b from a 

        同用户下别一数据库表的引用为 mydb..mytable   因表与字段之间用一个点表示,故为了区别,数据库与表之间的联系用两个点

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b; 

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..
from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. 

4,说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 

5,说明:随机取出10条数据
select top 10 * from tablename order by newid() 

6、说明:随机选择记录
select newid() 

7,说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
id 为主键,主键一定不会重复,重复的只是col1,col2 ,按col1,col2分组,相同的分到一组,此时取出最大的id,(min也一样)剩下的就是重复的,去掉即可。
注:dinstinct只能区别一个列值,若想得到唯一的一行记录,可用:
select from tablename where id in( select max(id) from tablename group by col1,col2,... )
select max(id) from tablename group by col1,col2,...  取出表中唯一的行,那么剔除重复,唯一行的个数为:
select count(1) from (select max(id) as id from tablename group by col1,col2,...) m
也可用:select count(1) from (select distinct col1,col2,... from tablename ) m

8、说明:列出数据库里所有的表名
select name from sysobjects where type='U' 

 9,说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID  Desc  

10,按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 

11,查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P' 

 12,一条语句执行跨越若干个数据库
select * from OPENDATASOURCE('SQLOLEDB','Data Source=远程ip;User ID=sa;Password=密码').库名.dbo.表名 

13 数据库里有1,2,3,4,5 共5条记录,要用一条sql语句让其排序,使它排列成4,5,1,2,3,怎么写?

select * from t
 order by case id when 4 then 1
                  when 5 then 2
                  when 1 then 3
                  when 2 then 4
                  when 3 then 5 end 

 或:
select * from t order by charindex(cast(id as varchar),'45123')
14,取出一个年级各班的前两名:
class? name? score
2班??? 张二??? 400
2班??? 张三??? 300
2班??? 张四??? 200
2班??? 张五??? 100
3班??? 刘一??? 500
3班??? 刘二??? 400
3班??? 刘三??? 300
3班??? 刘四??? 200
3班??? 刘五??? 100

SELECT t.class,t.name,t.socre
FROM tmp t
WHERE EXISTS( SELECT 1 FROM? (SELECT TOP 2 * FROM tmp tm WHERE tm.class = t.class ORDER BY tm.socre DESC )m WHERE? m.name = t.name )
ORDER BY t.class,t.socre DESC,t.name
--利用子查询获取一个班级内最高的两名然后与总表连接
2010十月1

从一个表中将数据导入到另一个表中

sql server 评论关闭

在查询分析中执行:
insert into city
select * from mdcity

insert会用select的数据集

2010十月1

SqlServer表日期字段提供默认值

sql server 评论关闭

在默认下值项填入: (getdate())

2010十月1

修改当前自增长值

sql server 评论关闭

alter table table_name AUTO_INCREMENT=n;

2010十月1

存储过程

sql server 评论关闭

存储过程 就是将T-SQL进行封装成函数,直接调用此过程来进行数据的处理。

优点:存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
将业务逻辑封装在存储过程中,相当于让数据库服务器来分担web服务器的压力。

缺点:与SQL SERVER 绑定,可移植性差

创建:
CREATE PROCEDURE mysp_output
@SUM int output //要返回的变量
@cityID
AS
select @SUM=sum([ID]) from city where id = @cityID
GO

执行:在外部可直接执行: EXEC dbo.frm_user_password ‘getpassword’, ‘admin’ ;

或: EXEC dbo.frm_user_password @tranType = ‘getpassword’, @user = ‘admin’ ;

注:@tranType是存储过程中的参数名,必须要一致

2010十月1

T-SQL 语法

sql server 评论关闭
?
一,SQL变量
?局部变量必须以“@”开头,而且必须先用DECLARE命令说明后才可使用,在Transact-SQL中不能像在一般的程序语言中一样使用“变量=变量值”来给变量赋值。必须使用SELECT或SET命令来设定变量的值,其语法如下:
?? ?SELECT@局部变量=变量值?SET @局部变量=变量值
 declare@id char(10)  select@id=‘10010001’
在Select命令查询数据时,在Select命令中直接将列值赋给变量

?? ?declare@name char(30)@wage money
?? ??? ?select@name=e_name,@wage=e_wage
?? ??? ?from employee
?? ??? ?where emp_id=’10010001′
?? ??? ?select@name as e_name,@wage as e_wage

?? ?
?? ?全局变量:全局变量不是由用户的程序定义的,它们是在服务器级定应义的。只能使用预先说明及定义的变局变量。引用全局变量时,必须以“@@”开头。局部变量的名称不能与全局变量的名称相同、否则会在应用中出错。

二、SQL流程控制命令

?? 1,if

?? ?select @x=1,@y=2, @z=3

  if@x>@y

  print‘x>y’ –打印字符串’x>y’ ? /print 代表输出到控制台

  else if@y>@z

  print’y>z’

  else print’z>y’?

?? ?2,?BEGIN…END

?? ??? ?其语法如下:

  BEGIN

  <命令行或程序块>

  END

  BEGIN…END用来设定一个程序块,将在BEGIN…END内的所有程序视为一个单元执行BEGIN…END经常在条件语句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一程序块。

3 CASE

  CASE 命令有两种语句格式:

  CASE <运算式>

  WHEN <运算式>THEN<运算式>

  …

  WHEN<运算式>THEN<运算式>

  [ELSE<运算式>]

?se pangu

  update employee

  set e_wage =

  case

  when job_level = ’1’ then e_wage*1.08

  when job_level = ’2’ then e_wage*1.07

  when job_level = ’3’ then e_wage*1.06

  else e_wage*1.05

  end

4 WHILE…CONTINUE…BREAK

  其语法如下:

  WHILE <条件表达式>

  BEGIN

  <命令行或程序块>

  [BREAK]

  [CONTINUE]

  [命令行或程序块]

  END

  WHILE 命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过CONTINUE 命令之后的语句,回到WHILE 循环的第一行命令。BREAK 命令则让程序完全跳出循环,结束WHILE 命令的执行。WHILE 语句也可以嵌套。

5,其它命令。

?(1)PRINT

  语法如下:

  PRINT ‘any ASCII text’ | @local_variable | @@FUNCTION | string_expression

  PRINT 命令向客户端返回一个用户自定义的信息,即显示一个字符串(最长为255个字符)、局部变量或全局变量。如果变量值不是字符串的话,必须先用数据类型转换函数CONVERT(),将其转换为字符串。其中,string_expression 是可返回一个字符串的表达式。表达式的长度可以超过8000 个字符,但超过8000 的字符将不会显示。

?(2)得到日期? SELECT GETDATE()??? SELECT CONVERT(varchar(100), GETDATE(), 20) : 2009-06-27 09:24:51

6,例子.

?遍历元素

DECLARE @vcum1 char(255)
DECLARE @vcum2 char(255)
DECLARE @vcum3 char(255)

DECLARE? cs1 CURSOR FOR SELECT * FROM city
OPEN cs1
FETCH cs1 INTO @vcum1, @vcum2,@vcum3
WHILE @@FETCH_STATUS = 0
BEGIN
?PRINT @vcum1
?FETCH NEXT FROM cs1 INTO @vcum1, @vcum2,@vcum3
?
END
CLOSE cs1
DEALLOCATE cs1注意:null是个非常特殊的值,什么值与null的运算结果都是null,常常导致语句错误。所以在设计库表结构时,常常设置default值,避免null的出现。但这样会增大数据文件的体积,浪费资源。当表中数值很稀疏时,这种浪费是非常惊人的。

判断是否等于null,不能用=null和<>null,要用 is null 和 is not null 。

设置字段值为null,可以用 update XX set YY=null。null外面不要加引号。

插入新记录用 insert XXX (YYY) values(null)。null外面不要加引号。

特别要注意null与”NULL”、”null”的区别。在SQL Server查询分析器中,null与”NULL”的显示完全相同,非常容易混淆!

2010十月1

远程连接SQL Server 2000服务器

sql server 评论关闭

具体步骤:

一、ping服务器IP能否ping通

观察远程SQL Server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。

二 在Dos或命令行下输入telnet 服务器IP 端口,看能否连通

如telnet 202.114.100.100 1433

通常端口值是1433,因为1433是SQL Server 2000的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败”。

如果这一步有问题,应该检查以下选项。

1.检查远程服务器是否启动了sql server 2000服务。如果没有,则启动。

2.检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开 开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。

3.检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。

事实上,如果默认端口被修改,也是可以的,但是在客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变。

4.如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。

5.检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号,版本号在8.0.2039以下的都需要打补丁。

如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你,你马上可以开始在企业管理器或查询分析器连接了。

三、检查客户端设置

程序->Microsoft SQL Server -> 客户端网络使用工具。像在服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。

四、在企业管理器里或查询那分析器连接测试

企业管理器->右键SQlserver组->新建sqlserver注册->下一步->写入远程IP->下一步->选Sqlserver登陆->下一步->写入登陆名与密码(sa,password)->下一步->下一步->完成

查询分析器->文件->连接->写入远程IP->写入登录名和密码(sa,password)->确定

通常建议在查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。

修改默认连接超时的方法:

企业管理器->工具->选项->在弹出的”SQL Server企业管理器属性”窗口中,点击”高级”选项卡->连接设置->在 登录超时(秒) 后面的框里输入一个较大的数字

查询分析器->工具->选项->连接->在 登录超时(秒) 后面的框里输入一个较大的数字

通常就可以连通了,如果提示错误,则进入下一步。

五、错误产生的原因通常是由于SQL Server使用了”仅 Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:

1.在服务器端使用企业管理器,并且选择”使用 Windows 身份验证”连接上 SQL Server。

2.展开”SQL Server组”,鼠标右键点击SQL Server服务器的名称,选择”属性”,再选择”安全性”选项卡。

3.在”身份验证”下,选择”SQL Server和 Windows “。

4.重新启动SQL Server服务。(在dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。

注释:在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个),默认端口是445,因此在本地能连通是不能说明什么问题的,连接远程服务器是完全不同的协议),再次连接,显示连接成功。

具体步骤:

一、ping服务器IP能否ping通

观察远程SQL Server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。

二 在Dos或命令行下输入telnet 服务器IP 端口,看能否连通

如telnet 202.114.100.100 1433

通常端口值是1433,因为1433是SQL Server 2000的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败”。

如果这一步有问题,应该检查以下选项。

1.检查远程服务器是否启动了sql server 2000服务。如果没有,则启动。

2.检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开 开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。

3.检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。

事实上,如果默认端口被修改,也是可以的,但是在客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变。

4.如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。

5.检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号,版本号在8.0.2039以下的都需要打补丁。

如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你,你马上可以开始在企业管理器或查询分析器连接了。

?

三、检查客户端设置

程序->Microsoft SQL Server -> 客户端网络使用工具。像在服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。

?

四、在企业管理器里或查询那分析器连接测试

企业管理器->右键SQlserver组->新建sqlserver注册->下一步->写入远程IP->下一步->选Sqlserver登陆->下一步->写入登陆名与密码(sa,password)->下一步->下一步->完成

查询分析器->文件->连接->写入远程IP->写入登录名和密码(sa,password)->确定

通常建议在查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。

修改默认连接超时的方法:

企业管理器->工具->选项->在弹出的”SQL Server企业管理器属性”窗口中,点击”高级”选项卡->连接设置->在 登录超时(秒) 后面的框里输入一个较大的数字

查询分析器->工具->选项->连接->在 登录超时(秒) 后面的框里输入一个较大的数字

通常就可以连通了,如果提示错误,则进入下一步。

?

五、错误产生的原因通常是由于SQL Server使用了”仅 Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:

1.在服务器端使用企业管理器,并且选择”使用 Windows 身份验证”连接上 SQL Server。

2.展开”SQL Server组”,鼠标右键点击SQL Server服务器的名称,选择”属性”,再选择”安全性”选项卡。

3.在”身份验证”下,选择”SQL Server和 Windows “。

4.重新启动SQL Server服务。(在dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。

?

注释:在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个),默认端口是445,因此在本地能连通是不能说明什么问题的,连接远程服务器是完全不同的协议),再次连接,显示连接成功。