楼主: ccwlm741212

[精华] Ms SQL常见问题收集整理集(不断收集中...)

[复制链接]
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
161#
 楼主| 发表于 2004-1-6 23:15 | 只看该作者
查询指定的表在那些数据库中存在
出处:PConline
责任编辑:ljx

[04-1-6 10:10]  作者: zjcxc/CSDN  

·热点推荐:·极速传送:Nettransport试用手记 ·微软发工具删除Office“纳粹”字体 ·网络电视横向评测! ·重点优化QQ:MYIM圣诞特别版热力放送 一波未平一波又起!IE再现四个新漏洞 ·2003国内10大流行病毒 ·圣诞贺卡软件大荟萃 ·隐蔽流媒体下载高级技巧实战 ·魔高一尺道高一丈 ·下载爱好者的护盘秘笈 ·用HelixServer组建视频服务器 ·让邮件搭上“特快专递”的列车 ·不堪回首-再造残旧的飞镖 ·用flash打造爆炸效果 ·实战网页图形效果一则 ·表格特效代码全集中 ·一碗粥(完整版) ·精美可爱-搞笑卡通人物(2) 


  declare @tbname sysname
  set @tbname='客户资料'

  declare @dbname sysname,@sql nvarchar(4000),@re bit,@sql1 varchar(8000)
  set @sql1=''
  declare tb cursor for select name from master..sysdatabases
  open tb
  fetch next from tb into @dbname
  while @@fetch_status=0
  begin
  set @sql='set @re=case when exists(select 1 from ['
  +@dbname+']..sysobjects where xtype=''U'' and name='''
  +@tbname+''') then 1 else 0 end'
  exec sp_executesql @sql,N'@re bit out',@re out
  if @re=1 set @sql1=@sql1+' union all select '''+@dbname+''''
  fetch next from tb into @dbname
  end
  close tb
  deallocate tb
  set @sql1=substring(@sql1,12,8000)
  exec(@sql1)

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
162#
 楼主| 发表于 2004-1-6 23:15 | 只看该作者
数据库学习:在数据库中存取文件
出处:PConline
责任编辑:ljx

[03-12-31 9:51]  作者: zjcxc/CSDN  

·热点推荐:·极速传送:Nettransport试用手记 ·微软发工具删除Office“纳粹”字体 ·网络电视横向评测! ·重点优化QQ:MYIM圣诞特别版热力放送 一波未平一波又起!IE再现四个新漏洞 ·2003国内10大流行病毒 ·圣诞贺卡软件大荟萃 ·隐蔽流媒体下载高级技巧实战 ·魔高一尺道高一丈 ·下载爱好者的护盘秘笈 ·用HelixServer组建视频服务器 ·让邮件搭上“特快专递”的列车 ·不堪回首-再造残旧的飞镖 ·用flash打造爆炸效果 ·实战网页图形效果一则 ·表格特效代码全集中 ·一碗粥(完整版) ·精美可爱-搞笑卡通人物(2) 


  '*************************************************
  '**
  '** 使用 ADODB.Stream 保存/读取文件到数据库
  '** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
  '**
  '** ----- 数据库连接字符串模板 ---------------------------------------
  '** ACCESS数据库
  '** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
  '**     ";Data Source=数据库名"
  '**
  '** SQL数据库
  '** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
  '**     "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
  '**
  '*************************************************
  '
  '保存文件到数据库中
  Sub s_SaveFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConcStr As String
   
    '数据库连接字符串
    iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=F:\My Documents\客户资料1.mdb"
   
    '读取文件到内容
    Set iStm = New ADODB.Stream
With iStm
        .Type = adTypeBinary    '二进制模式
        .Open
        .LoadFromFile "c:\test.doc"
    End With
   
    '打开保存文件的表
    Set iRe = New ADODB.Recordset
    With iRe
        .Open "表", iConc, adOpenKeyset, adLockOptimistic
        .AddNew         '新增一条记录
        .Fields("保存文件内容的字段" = iStm.Read
        .Update
    End With
   
    '完成后关闭对象
    iRe.Close
    iStm.Close
  End Sub
  '从数据库中读取数据,保存成文件
  Sub s_ReadFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConc As String
   
    '数据库连接字符串
    iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=\\xz\c$\Inetpub\zj\zj\zj.mdb"
   
    '打开表
    Set iRe = New ADODB.Recordset
    iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
    iRe.Filter = "id=64"
   
    '保存到文件
    Set iStm = New ADODB.Stream
    With iStm
        .Mode = adModeReadWrite
        .Type = adTypeBinary
        .Open
        .Write iRe("img"
        .SaveToFile "c:\test.doc"
    End With
   
    '关闭对象
    iRe.Close
    iStm.Close
  End Sub

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
163#
 楼主| 发表于 2004-1-6 23:16 | 只看该作者
数据库学习:通过作业定时同步两个数据库
出处:PConline
责任编辑:ljx

[03-12-31 14:59]  作者:zjcxc/CSDN  

·热点推荐:·极速传送:Nettransport试用手记 ·微软发工具删除Office“纳粹”字体 ·网络电视横向评测! ·重点优化QQ:MYIM圣诞特别版热力放送 一波未平一波又起!IE再现四个新漏洞 ·2003国内10大流行病毒 ·圣诞贺卡软件大荟萃 ·隐蔽流媒体下载高级技巧实战 ·魔高一尺道高一丈 ·下载爱好者的护盘秘笈 ·用HelixServer组建视频服务器 ·让邮件搭上“特快专递”的列车 ·不堪回首-再造残旧的飞镖 ·用flash打造爆炸效果 ·实战网页图形效果一则 ·表格特效代码全集中 ·一碗粥(完整版) ·精美可爱-搞笑卡通人物(2) 


    定时同步服务器上的数据的例子:

  --测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test
  --服务器上的表(查询分析器连接到服务器上创建)
  create table [user](id int primary key,number varchar(4),name varchar(10))
  go

  --以下在局域网(本机操作)
  --本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录
  if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id,     N'IsUserTable') = 1)
  drop table [user]
  GO
  create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
  go
  --创建触发器,维护state字段的值
  create trigger t_state on [user]
  after update
  as
  update [user] set state=1
  from [user] a join inserted b on a.id=b.id
  where a.state is not null
  go
  --为了方便同步处理,创建链接服务器到要同步的服务器
  --这里的远程服务器名为:xz,用户名为:sa,无密码
  if exists(select 1 from master..sysservers where srvname='srv_lnk')
   exec sp_dropserver 'srv_lnk','droplogins'
  go
  exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','xz'
  exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
  go

  --创建同步处理的存储过程
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id,   N'IsProcedure') = 1)
   drop procedure [dbo].[p_synchro]
  GO
  create proc p_synchro
  as
  --set  XACT_ABORT on
  --启动远程服务器的MSDTC服务
  --exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start   msdtc'',no_output"',no_output

  --启动本机的MSDTC服务
  --exec master..xp_cmdshell 'net start msdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法
  --BEGIN DISTRIBUTED TRANSACTION
   --同步删除的数据
   delete from srv_lnk.test.dbo.[user]
    where id not in(select id from [user])

   --同步新增的数据
   insert into srv_lnk.test.dbo.[user]
   select id,number,name from [user] where state is null

   --同步修改的数据
   update srv_lnk.test.dbo.[user] set
    number=b.number,name=b.name
   from srv_lnk.test.dbo.[user] a
    join [user] b on a.id=b.id
   where b.state=1

   --同步后更新本机的标志
   update [user] set state=0 where isnull(state,1)=1
  --COMMIT TRAN
  go

  --创建作业,定时执行数据同步的存储过程
  if exists(SELECT 1 from msdb..sysjobs where name='数据处理')
   EXECUTE msdb.dbo.sp_delete_job @job_name='数据处理'
  exec msdb..sp_add_job @job_name='数据处理'

  --创建作业步骤
  declare @sql varchar(800),@dbname varchar(250)
  select @sql='exec p_synchro'   --数据处理的命令
   ,@dbname=db_name()   --执行数据处理的数据库名

  exec msdb..sp_add_jobstep @job_name='数据处理',
   @step_name = '数据同步',
   @subsystem = 'TSQL',
   @database_name=@dbname,
    @command = @sql,
   @retry_attempts = 5,   --重试次数
   @retry_interval = 5    --重试间隔

  --创建调度
  EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
   @name = '时间安排',
   @freq_type = 4,     --每天
   @freq_interval = 1,    --每天执行一次
   @active_start_time = 00000  --0点执行
  go

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
164#
 楼主| 发表于 2004-1-6 23:37 | 只看该作者
一  基本概念  
(一)线程  

SQL  Server  使用操作系统的线程来执行并发任务。在不使用纤程的情况下,SQL  server将启动线程,并由OS将线程分配给cpu,线程管理由OS内核控制,当一个线程完成退出CPU,其他线程调度占用该CPU时,将发生一个上下文切换,这个切换是在应用程序的用户模式和线程管理的内核模式之间的切换,所以需要付出一定的代价,应当尽量避免这种切换  

(二)纤程  

为了减少上下文切换,引入纤程的概念,可以在SQL  server中启用纤程,纤程是线程的子模块,纤程由运行在用户模式下的代码管理,所以切换纤程比切换进程的代价少的多,因为纤程模式不需要在将用户模式和内核模式中切换,而切换线程则需要这种转换。  


(三)两者的区别  

SQL  server管理纤程的调度,而OS管理线程的调度  
线程模式里  SQL  server为每个并发用户创建配一个线程  
纤程模式中  SQL  server为每个CPU分配一个线程,并为每个并发用户创建配一个纤程,一个线程中可以有多个纤程,纤程只在线程里切换,不用上下文切换  


注意:SQL  Server  Personal  Edition和  Desktop  Edition不支持纤程模式  
           Win95,98不支持线程池  


二  SQL  Server对线程和纤程的管理  

SQL  Server既可以为用户连接维护一个线程池,也可以维护一个纤程池(如果设置了纤程模式,则系统只维护纤程池,不在是线程池)  在连接池中,线程和纤程都看作工作纤程,并可以由  
max  worker  threads  选项来设置SQL  server可分配的线程或纤程的最大数目,一般采用默认值255  

当一个语句需要SQL  server执行时:  

1)如果线程池里用空闲的线程,SQL  server将为该语句分配一个线程  
2)如果线程池中没有可供使用的空闲线程并且没有达到最大工作线程数量,SQL  server将为该命令创建新的工作线程  
3)如果到了最大线程使用数量并且没有空闲的线程,则进程必须等待其他处理完成后释放一个线程  



三  配置SQL  Server线程纤程  

1)如何启用纤程模式:  
企业管理器->服务器属性->处理器->使用windows  nt  纤程  
或者用  sp_configure  将lightweight  pooling  设置为1  

2)max  worker  threads  选项  
该选项配置SQL  Server进程的可用工作线程数  默认值为  255  

改变方法:  
企业管理器->服务器属性->处理器->最大工作线程  
或者用  sp_configure修改max  worker  threads  

3)affinity  mask  选项  
该选项在系统负荷过重时可以提高对称多处理器系统的性能,将线程与特定的处理器相关联,并指定SQL  Server使用的处理器  

改变方法:  
企业管理器->服务器属性->处理器->处理器控制->选择一或多个将亲和力掩码组合在一起的处理器  
或者用  sp_configure修改affinity  mask  

4)max  degree  of  parallelism  选项  
该选项可以限制在并行计划执行中使用的处理器数量  

改变方法:  
企业管理器->服务器属性->处理器->并行->选择执行并行查询的处理器数量  
或者用  sp_configure修改max  degree  of  parallelism

使用道具 举报

回复
论坛徽章:
1
设计板块每日发贴之星
日期:2007-11-26 01:06:25
165#
发表于 2004-1-8 17:01 | 只看该作者
好帖子,不过楼主要是能够整理成文档就更加彻底了,支持楼主

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
166#
 楼主| 发表于 2004-1-9 08:19 | 只看该作者
最初由 十一月雨 发布
[B]好帖子,不过楼主要是能够整理成文档就更加彻底了,支持楼主 [/B]


全都是转过来来的,大家多看看,都不错的说
大家有好东西也可以转过来给大家分享

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53
167#
发表于 2004-1-14 11:05 | 只看该作者

偶有一疑问

请问,我在导入以前的一个备份数据时,突然发生中断,不知何因,之后这个数据库就变成什么  'Loading', 关机后一直这样子,怎么办??难道一定要删除掉重新来么?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
168#
发表于 2004-1-16 09:57 | 只看该作者

Re: 偶有一疑问

最初由 tomy55 发布
[B]请问,我在导入以前的一个备份数据时,突然发生中断,不知何因,之后这个数据库就变成什么  'Loading', 关机后一直这样子,怎么办??难道一定要删除掉重新来么? [/B]


try take offline再take online

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
169#
发表于 2004-1-16 09:59 | 只看该作者

SQL Server中全角和半角字符的比较问题

这是一个在我实际一个项目中遇到的问题。03BHL01001(上海)和03BHL01001(上海)比较的结果是一样的。导致引起的重复的主键问题。

03BHL01001(上海)和03BHL01001(上海)差别,就在于前者的括号是全角的括号字符,后者是半角的括号字符。全角的括号字符和半角的括号字符的ascii码显然是不一样的。全角的( ASCII码是0xA3A8 ,而半角的( 是0x28。那么为什么SQL Server会认为是一样的呢?

问题其实就出在数据库的排序规则上,让我们在仔细研读一下SQL Server的文档。SQL Server的排序规则由这样几部分组成,代码页、区分大小写、区分重音、区分宽度。最后一个在SQL Server的联机帮助中没有进一步提及,其实本篇遇到的问题就是由于这个原因造成的。区分宽度:指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。如果没有选择,则 SQL Server 将认为相同字符的单字节表示法和双字节表示法等效。

缺省,安装SQL Server中文版的时候,SQL Server帮你选择的排序规则是Chinese_PRC_CI_AS(Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不区分大小写、区分重音、不区分假名、不区分宽度。因此,自然就认同03BHL01001(上海)=03BHL01001(上海)。

所以,正确的选择应该是,后缀为WS的中文排序规则。本例中我们应该选择Chinese_PRC_CI_AS_WS。

我们来看一下,指定排序规则是Chinese_PRC_CI_AS_WS后,怎么样了?



select 1 where '03BHL01001(上海)'='03BHL01001(上海)'

collate Chinese_PRC_CI_AS_WS



-----------



(所影响的行数为 0 行)


看来这个问题解决了。

重要提示:

如何察看使用那个排序规则呢?可以使用下面的SQL语句。

SELECT *

FROM ::fn_helpcollations()

可以查询所有排序规则的信息。

查出所有中文排序规则的信息

SELECT * FROM

(

SELECT *

FROM ::fn_helpcollations()) A

WHERE name like 'Chinese%'

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
170#
 楼主| 发表于 2004-1-29 20:07 | 只看该作者
得到所有的数据表(用户数据表):  
select  *  from  sysobjects  where  xtype  =  'u'  
得到当前数据表的所有字段:  
select  *  from  syscolumns  where  id  =  object_id('数据表名')

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表