Sql数据库默认实例和命名实例的区别:
1、服务中服务名称的区别:
- 默认实例:MSSQLSERVER;
- 命名实例:实列名为:benet,在服务中的名称是:MSSQL$BENET;
注:如果你有多个实例的时候会在服务中出现多个服务名称,一个实例对应一个服务。
2、连接到查询分析器或探查器的连接字符串的区别:
- 默认实例可以使用:“.”(点)、“(local)”、“计算机名称”、“localhost”
- 实例名称:计算机名:pcname,实例名:benet,连接时使用的名称是:pcname\benet
3、端口区别
- 默认实例:1433
- 命名实例:1434
4. 安装Sql Server2008 R2版遇到问题:
TITLE: Microsoft SQL Server 2008 R2 Setup
------------------------------The following error has occurred:
Could not open key: UNKNOWN\Components\00C004FEE241478418DBB8505B78CBC5\FC38113FF01E1ED4BB95C6F03FE884E1. Verify that you have sufficient access to that key, or contact your support personnel.
For help, click: http://go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=10.50.1600.1&EvtType=0xDF039760%25401201%25401
------------------------------
BUTTONS:OK
------------------------------
遇到此问题点击Continue,继续就可以了。
sqlserver安装一半断电后重新安装,不成功,卸载掉sqlserver后出现以上问题,就在卸载掉sqlserver后重启电脑后,以管理员身份打开cmd窗口,执行下面这一句代码:
secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
执行完后在重新安装sqlserver2008r2就可以了。
卸载sqlserver,需要操作的地方:控制面板-卸载程序-找到Microsoft Sql Server 2008 R2(64-bit),按着提示步骤执行卸载就ok;把注册表与Microsoft Sql Server相关的内容删除掉;系统盘sql安装目录Miscrosolft Sql Server文件夹删掉。
sqlserver注册表:
1.HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager中(看右边)找到PendingFileRenameOperations值并删除它
2.HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server
3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
4.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
5.truncate 和 delete区别:
delete/truncate只删除表数据不删除表结构
delete操作后存储到rollback segement回滚段中事务提交之后才生效,如果有相应的trigger,执行时会被触发;truncate/drop操作后立即生效,源数据不放到rollback segement,不回滚不触发trigger
delete : 1.DML语音;2.可以回退;3.可以有条件的删除;(自增字段保留原来最大数值);
truncate: 1.DDL语音;2.无法回退;3.删除所有行;4.比delete效率快(自增字段开始从头计数)
drop:删除表结构及与表相关的约束constrain、触发器trigger、索引index,但依赖该表的存储过程stored procedure/函数function保留但是状态变为invalid
DML=Data Manipulation Language:对数据库里的数据进行操作的语音,比如:Select/Insert/Update/Delete
DDL=Data Definition Language:定义或改变表结构、数据类型、约束和表之间链接等等,比如:Create/Alter/Drop
DCL=Data Control Language:设置或更改数据库用户或角色权限语句,比如:grant/deny/reoke
6.sql server 2005以上版本,外围应用配置器(Surface Area Configuration)已不是独立的模块,默认是允许远程连接的,不需要再外围应用配置器中进行设置。可以在这里找到:打开sql server visual studio,登录sql server,右击服务器名称,点击“方面”(Facets),在弹出窗口的右侧下拉框里找到“外围应用配置器”(Surface Area Configuration)
7.xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。
xp_cmdshell组件作为sql server 安全配置的一部分被禁用了,可以通过sp_configure启用它,sql脚本如下:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
需要关闭xp_cmdshell的话,只将1改为0
xp_cmdshell 语法:
xp_cmdshell { 'command_string' } [ , no_output ]
‘command string’ 包含传递到操作系统的命令的字符串,‘no_output’可选参数,指定不返回任何输出。
返回结果:0成功,1失败
例如:exec xp_cmdshell 'copy path1 path2'可以把文件从一个路径复制到另一个路径下。注意事项:在执行复制文件命令时可能会遇到权限问题,可以通过sql net use命令登录目标服务器
EXEC master.sys.xp_cmdshell 'net use \\服务器名或IP\ipc$ password /user:username',然后再执行复制文件命令就可以了。
8.merge语句语法
MERGE [hint] INTO [schema ] table [t_alias]
USING [schema ]{ table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_
update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
第一行 命名目标表并给别名T1
第二行 using子句提供merge操作的数据源,命名T
第三行 on子句指定合并的条件
第四行 when matched then 子句判定条件符合则对表T1做什么改变(或删除)
第五行 when not matched then 子句判断条件不符合则插入的操作
9. 纪念一下,使用了这么多年的sql server,竟不知sql表中有“计算列(Computed)”,创建该计算列方法:
create table table1
(
number decimal(18,4),
price money,
Amount as number*price --这里就是计算列
)
计算列是不需要我们指定数据类型与是否允许为null等信息的,SqlServer会根据情况自动赋予数据类型
使用SSMS创建“计算列”:打开“设计表格”窗口,在column属性中有一项“计算所得列的规范(Computed column specification)”,展开,公式(Formula) 写计算公式,是否持久(Is Persisted)
计算列如果没有特殊的设定,它将会是一个虚拟列,也就是这个列实际上是不存在的,只是每次要取这列的值时,sql会按照计算列的公式计算一次,再把结果返回给我们。这样就会存在一些问题,比如,每次计算都会消耗一定的时间,而且也不能在这个列上创建索引。那么能不能把计算列的结果存起来,每次取数据的时候直接把结果返回给我们,而不用每次去计算。呵呵,恭喜你,创建计算列时把"是持久的"这个选项勾起来,就能达到我们的目的了,这时候,计算列就是一个实实在在的列,也可以在该列上创建索引了。
注意:
1,计算列如果没有设置为"是持久的",那么它是不可以用来做check,foreign key或not null约束。当然,如果我们在microsoft sql server management studio为计算列设置了check等约束了,sql server会自动将该列设置为"是持久的"。
2,计算列不可以再次用来作为中一个计算列的一部分。
3,在触发器,不可以对计算列进行update判断,否则会报如下错误:
列”不能在IF UPDATE子句中使用,因为它是计算列。”
9.重置自增列:
--- 删除原表数据,并重置自增列truncate table tablename --truncate方式也可以重置自增字段--重置表的自增字段,保留数据DBCC CHECKIDENT (tablename,reseed,0) -- 设置允许显式插入自增列SET IDENTITY_INSERT tablename ON-- 当然插入完毕记得要设置不允许显式插入自增列SET IDENTITY_INSERT tablename Off
10. Distributed transaction-分布式事务
创建link server时,有个选项是“Enable promotion of Distributed Transactions for RPC”,设置为true 表示启用分布式事务,前提是保证两个或多个数据库服务器都启用了Distributed Transaction coordinator服务,如未做设置会报错“OLE DB provider "SQLNCLI11" for linked server "HKSQLPWV034" returned message "The transaction manager has disabled its support for remote/network transactions." ”;设置false就不会报这个错了
11.sql server数据库中不能识别的空格 ascii 160 ,可以识别的空格是 ascii 32
把ascii 160空格替换掉:replace(@str,char(160),'')
12. 定时执行sql server job时,报错:
Executed as user: CN\CNSHASQLPWV749sqlagt. Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. [SQLSTATE 28000] (Error 18452). The step failed.
这个时候需要去检查Job调用的存储过程或执行的T-Sql语句中,是否包含Link server?创建的Link server是否没有问题,是否指定了链接服务器的账号和密码?如果没有指定账号和密码则需要重新创建Link server.
13.sql server创建用户,如果提示该用户已存在,请检查各个数据库下是否有该用户,如果有则删除掉,然后再重新创建该用户及分配权限
14.sql server创建完用户后,我建议要重启一下数据库服务