• Sql Server问题集锦


    Sql数据库默认实例和命名实例的区别:

    1、服务中服务名称的区别:

    • 默认实例:MSSQLSERVER;
    • 命名实例:实列名为:benet,在服务中的名称是:MSSQL$BENET;
      注:如果你有多个实例的时候会在服务中出现多个服务名称,一个实例对应一个服务。
    2、连接到查询分析器或探查器的连接字符串的区别:
    • 默认实例可以使用:“.”(点)、“(local)”、“计算机名称”、“localhost”
    • 实例名称:计算机名:pcname,实例名:benet,连接时使用的名称是:pcnameenet

    3、端口区别

    • 默认实例:1433
    • 命名实例:1434    

    4. 安装Sql Server2008 R2版遇到问题:

    TITLE: Microsoft SQL Server 2008 R2 Setup
    ------------------------------

    The following error has occurred:

    Could not open key: UNKNOWNComponents0C004FEE241478418DBB8505B78CBC5FC38113FF01E1ED4BB95C6F03FE884E1. 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%infdefltbase.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_USERSoftwareMicrosoftMicrosoft SQL Server

      3.HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server

      4.HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServer

    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 \服务器名或IPipc$ 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: CNCNSHASQLPWV749sqlagt. 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创建完用户后,我建议要重启一下数据库服务

    15.附加没有日志文件的数据库的方法,

          1.新建同名的数据库文件

        2.暂停SQLSetver服务

        3.将原先的mdf文件,覆盖新建的数据库,删除新数据库的ldf文件

        4.重新启动SQLSetver服务 ,这时看到的数据库是这个样子的,打不开

      

        5.执行以下SQL语句

         1 --1.设置为紧急状态

     2 alter database 数据库名称 set emergency
     3 --2.设置为单用户模式
     4 alter database 数据库名称 set single_user
     5 --3.检查并重建日志文件
     6 dbcc checkdb('数据库名称',REPAIR_ALLOW_DATA_LOSS)
     7 --4.第3步操作如果有错误提示,运行第4步,没有错误则跳过
     8 dbcc checkdb('数据库名称',REPAIR_REBUILD)
     9 --5.恢复成多用户模式
    10 alter database 数据库名称 set multi_user
     
    16.数据库日志备份失败,失败原因:某数据库的恢复模式是simple,不允许使用backup log语句,
    选中数据库名,鼠标右击选择property属性,然后选择左侧“Options”选项卡,修改数据库的恢复模式,从Simple修改为Full,保存修改。切记保存修改后要先手动重新备份一下数据库,然后再执行数据库日志备份job,该jog就可以执行成功了。


  • 相关阅读:
    UIAlertView
    网络请求ASIhttp
    省份城市选择
    Certificates
    UTF8
    xcode增加注释插件
    常用片段 button Label
    开发铺助工具
    iOS UI框架
    iOS 引导页
  • 原文地址:https://www.cnblogs.com/dxmdiy/p/4610301.html
Copyright © 2020-2023  润新知