一、 题目:请教复杂SQL问题 我有两个表, 假如数据如下 表1 ID A B -------------- 1 A1 B1 1 A2 B2 表2 ID C D ----------------------- 1 C1 D1 1 C2 D2 1 C3 D3 请问我有什么办法,可以将上面两个表的数据,查询得到如下 同一个ID,有时表1的行数多,有时表2的行数多 ID A B C D ------------------------------------ 1 A1 B1 C1 D1 1 A2 B2 C2 D2 1 C3 D3 解决: select identity(int,1,1) rid,id,a,b into #t1 from 表1; select identity(int,1,1) rid,id,a,b into #t2 from 表2; select a.id,a.a,a.b,b.c,b.d from #t1 a full join #t2 b on a.rid=b.rid order by b.rid; 二、 题目:为什么then @sum=@sum+1 else @sum end 有误? declare @i smallint declare @sum int set @i=1 set @sum=0 while @i<=8 begin select cno, case when 'F'+cast(@i as varchar(3))='T' then @sum=@sum+1 else @sum end Tsum from tb2 set @i=@i+1 end ************** 服务器: 消息 170,级别 15,状态 1,行 8 第 8 行: '=' 附近有语法错误。 服务器: 消息 156,级别 15,状态 1,行 11 在关键字 'end' 附近有语法错误。 **************** 解决: declare @i smallint declare @sum int set @i=1 set @sum=0 while @i<=8 begin select cno, case when 'F' + cast(@i as varchar(3)) = 'T' then @sum + 1 else @sum end Tsum from tb2 set @i=@i+1 end 三、 题目:SQL2000完全备份策略请教 我想请教个问题,A数据库每周一做一次完全备份,每天做一次差异备份,然后每小时做一次日志备份。 我想问,比如我在星期三手工的做了一次完全备份,那之后的差异备份(周四到周日)就是在我手工备份的基础上产生的了?那在这一周内,如果周五如果数据出了问题,以下方法可以还原吗? 1.还原周一的完全备份,接着还原每天的连续的日志备份 2.还原周一的完全备份,还原周二的差异备份,还原周二到周五的日志备份 3.还原周三的完全备份,还原周五的差异备份,还原周五的日志备份 请问是这样吗?还有其他方法吗? 如果我在这期间手动备份了数据库,那差异备份就是在我手动备份数据库的基础上差异了?那我之前自动备份的那个数据库就不能应用差异备份恢复了,是这样吗? 解决: 恩,差异备份应该是基于上一次的完全备份基础上的,那这样来说的话,一般情况下我们就没必要手动的去备份数据库了,只用将系统自动备份的数据库转存到它处,安全起见再把差异备份和日志备份一同转存,这样就可以了吧。 下面的备份策略怎么样: 1。每周末00:00完全备份数据库 2。每天1:00差异备份数据库 3。每隔4个小时日志备份 每周为一个循环,这样的话会产生1个完全备份,7个差异备份,42个日志备份,一共就是50个备份文件。 一共有2个数据库,均为6G左右,活动不是很频繁,这样的备份策略合适吗? 我答: 不好意思,我记错了,差异备份是以最近一次全备为基础的,而且备份后系统标志的单位也不是以数据块为单位,而是以EXTENTS为单位。 合适不合适不好说,至少我觉得是安全的。其实,这么小的数据库,而且活动不频繁,我觉得有点繁琐,差异备份一般是针对很大的数据库做的,不过,个人感觉合适就是合适,对吧。 四、 问题: 一个PL/SQL语句如何转换为SQL SERVER 语句 begin for fm in (SELECT a.zgh,b.xm FROM gzxt a,zgxx11 b WHERE a.xm is null and a.zgh=b.zgh) loop update gzxt u set u.xm=fm.xm where u.zgh= fm.zgh and u.xm is null; end loop; end; 解决: Update gzxt Set XM=b.xm From gzxt a Join gzxx11 b on a.zgh=b.zgh Where a.xm is null 测试下,没验证过 也不知道这个ORACLE对这个循环的性能能作如何优化,还是开发者喜欢玩ROW而不玩SETS 五、问题: 紧急提问,批量修改问题。 我这有个mssqlserver的数据库,其中一张表是有个字段名是docno(档案号),字段类型为int,4位,但是在实际录入数据时候,由于没有加约束和规则,可以录入5位,既10000以上的编码。现在要求把这这些1000以上的编码改为4位,请问如何改。 例如: 修改前 docno 修改后 docno 61051 1051 61075 1075 61078 1078 我想批量一次性改正过来,请问如何编写这个语句。 谢谢!!! 解决: update doc set docno=substring(docno,2,4); update doc set docno=substring(cast(docno as varchar),2,4); 六、 问题:[求助]SQL字符串删除语句 SQL求助,求教一个语句:一个表,判断一个字段里面的内容,如果有含某个字符,比如含字符'a',就把该字符后面的所有内容删除. 比如一个表的TXT字段里的第一记录内容为:fair,第二记录内容为:abbe,第三记录的内容为:monday,运行语句后的各记录分别为:f,null,mond 谢谢呀! 解决: select left(txt,CHARINDEX('a',txt)-1) from test1; 七、 问题:求救关于isnumeric问题 表table_1 字段 jg_1 值列表如下 jg_1 0.01 0.02 100.1 正 负 - - 语句如下 select CASE isnumeric(jg_1) WHEN 1 THEN CONVERT(decimal(12, 3), jg_1) ELSE NULL END) AS jg_num from table_1 报错 将 varchar 转换为数据类型 numeric 时出现算术溢出错误 经测试,如果是汉字,isnumeric是有用的,但是如果是-这样的字符就出错了。 那么这个语句要怎样写才能转换 [ 本帖最后由 lky9999 于 2008-8-21 11:49 编辑 ] 解决: 这样当然是可以了。 和楼主的问题还是有差别。 楼主的问题就处在了'-','+','$'等这些非NUMERIC类型的字符,在用isnumeric时,会返回1,也会按照numeric类型进行转换,这是不可能的,从而导致出错。 select CASE isnumeric(jg_1) WHEN 1 THEN CONVERT(decimal(12, 3), jg_1) ELSE NULL END AS jg_num from table_1 where jg_1 not in('-','+','$'); 排除这些值。 八、 问题: 如何给一个用户赋予整个数据库的权限? 捎带负责一套SQLServer的数据库。 现在,需要给一个用户赋予一个数据库中所有表的增删改查权限 和所有存储过程、触发器的执行权限, 因为表很多,存储过程也有500个左右,有没有简便一些的方法,把上面的权限赋上?多谢了! 环境:Win2003 + SQL2005 __________________ 芝兰生于深林,不以无人而不芳! 关注:Oracle9i/10g/11g+linux/unix+存储技术 DBA逐渐多元化了:SQL、Oracle、DB2都要搞起来! 纸上得来终觉浅,绝知此事要躬行 子在川上曰:逝者如斯夫,不舍昼夜。时间怎么过得这么快呢? E-mail:sdusun0819@hotmail.com 解决: 老弟,别来无恙? use test; go EXEC sp_addrolemember 'db_datareader', 'test'; EXEC sp_addrolemember 'db_datawriter', 'test'; --给数据库用户db_username授予表权限; use test; go select 'grant execute on '+name+' to db_username' from test.sys.triggers; select 'grant execute on '+name+' to db_username' from test.sys.procedures where name not like 'sp%'; --执行生成的脚本,给数据库用户db_username授予触发器、过程执行权限; 仅供参考 [ 本帖最后由 sqysl 于 2009-1-24 10:36 编辑 ] __________________ QQ:503318229 msn:sqysl@hotmail.com Blog:sqysl.itpub.net 九: 题目: 请问如果授予一个用户只读数据库的权限 数据库为sql server 2000,一个只读数据库DBTest ,请问如何授予用户test访问只读数据的DBTest的权限?(先去除只读再添加权限的方法不算) 解决: CREATE LOGIN tt WITH PASSWORD = 'tt#tt'; USE test; CREATE USER tt_db FOR LOGIN tt; GO EXEC sp_addrolemember 'db_datareader', 'tt_db'; GO 十、问题 请教大家一个SQL的写法? 表名:TB 字段:channel varchar(50) 访问频道 visittime varchar(50) 访问时间 库里记录保存的形式是:yyyy-mm-dd hh:mm:ss 例如:2009-02-01 16:58:30 我想统计 频道名字 为“五”的 每个小时的访问次数?就是8点、9点、10点......的访问次数? 谢谢各位! 解决: SELECT channel,sum(CASE DATEPART(HOUR,visittime) WHEN 8 THEN 1 ELSE 0 END ) as '8', sum(CASE DATEPART(HOUR,visittime) WHEN 9 THEN 1 ELSE 0 END ) as '9', sum(CASE DATEPART(HOUR,visittime) WHEN 10 THEN 1 ELSE 0 END ) as '10' FROM TB WHERE channel='五' GROUP BY channel;
mssql论坛集锦
来源:这里教程网
时间:2026-03-02 10:00:38
作者:
编辑推荐:
- Word2007如何制作公章03-02
- mssql论坛集锦03-02
- Word2007如何插入图表03-02
- SQL Server解题:《编程之美》1的数目03-02
- 将15位身份证升级成18位的用户定义函数03-02
- SQL Server 2005 日志删除和日志文件限制03-02
- SQL Server 2005日志文件损坏的处理方法03-02
- Word2007如何并排比较文档03-02
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- AutoCAD教程:长方体和圆角命令的运用
AutoCAD教程:长方体和圆角命令的运用
26-03-02 - AutoCAD教程:平面摄影命令将三维模型转为三视图
AutoCAD教程:平面摄影命令将三维模型转为三视图
26-03-02 - AutoCAD中式建筑模型烛台的画法
AutoCAD中式建筑模型烛台的画法
26-03-02 - word2007如何将自选图形对齐
word2007如何将自选图形对齐
26-03-02 - word2007怎么设置下拉菜单
word2007怎么设置下拉菜单
26-03-02 - 原来MSSQL还可以这样调优
原来MSSQL还可以这样调优
26-03-02 - SQL Server 检测字符串中是否有重复字符的函数
SQL Server 检测字符串中是否有重复字符的函数
26-03-02 - AutoCAD三维教程:南非世界杯足球的画法及渲染
AutoCAD三维教程:南非世界杯足球的画法及渲染
26-03-02 - 关于记录数的疑问
关于记录数的疑问
26-03-02 - 文件的导入导出
文件的导入导出
26-03-02
