网站首页 > 网管员之家  > 数据库 > 当前主题    站内搜索    首页  上一页  下一页  尾页  页次1/1         新用户申请  老用户登录  返回首页
作者信息   主题: 与SQL语言和存储过程(Transact SQL)有关的总结16634

白瑞德


发表主题: 2957
发表回复: 4616
网站暂行积分: 13487


【人类幸存者】



  发表时间: 2010-5-3 10:28:02             

特别提示:本帖子在 2010-10-15 10:23:52 由用户 白瑞德 编辑过

【10.15】几个比较基础的
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

SQL code1.
浪漫烛光 www.langmanzg.com

Create Table TableXml(id int identity(1,1) Primary Key,x xml)
浪漫烛光 www.langmanzg.com

Go
浪漫烛光 www.langmanzg.com

Insert Into TableXml
浪漫烛光 www.langmanzg.com

    Select
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

    Union Select
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

        
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

Go
浪漫烛光 www.langmanzg.com

--问题:如何把 更新成
浪漫烛光 www.langmanzg.com

--方法比较笨
浪漫烛光 www.langmanzg.com

--应该有比较好的吧,可是我没想到
浪漫烛光 www.langmanzg.com

declare @NewName varchar(20)
浪漫烛光 www.langmanzg.com

declare @NewCity varchar(20)
浪漫烛光 www.langmanzg.com

declare @ID int
浪漫烛光 www.langmanzg.com

select  @NewName='NewName',@NewCity='NewCity',@id=1
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

update TableXml
浪漫烛光 www.langmanzg.com

set x.modify('
浪漫烛光 www.langmanzg.com

    replace value of (/root/Info[@id=sql:variable("@ID")]/@name)[1]
浪漫烛光 www.langmanzg.com

    with sql:variable("@NewName")
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

    );
浪漫烛光 www.langmanzg.com

update TableXml   
浪漫烛光 www.langmanzg.com

set  x.modify('
浪漫烛光 www.langmanzg.com

    replace value of (/root/Info[@id=sql:variable("@ID")]/@City)[1]
浪漫烛光 www.langmanzg.com

    with sql:variable("@NewCity")
浪漫烛光 www.langmanzg.com

    '
浪漫烛光 www.langmanzg.com

    )
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

select * from TableXml
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

--2.在SQL查询语句(Select Distinct... From ... Join ... On ... Where ... Group By ... With ... Having ... Order By ...)中,各个步骤是按什么先后顺序执行的?
浪漫烛光 www.langmanzg.com

--  同時,Where 条件中三个关键字(Or, And, Not),它们搜索的順序是什么?
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

--执行顺序
浪漫烛光 www.langmanzg.com

1、FROM
浪漫烛光 www.langmanzg.com

2、on
浪漫烛光 www.langmanzg.com

3、join--做笛卡尔乘积
浪漫烛光 www.langmanzg.com

4、WHERE
浪漫烛光 www.langmanzg.com

5、group BY
浪漫烛光 www.langmanzg.com

6、with(cube | rollup )
浪漫烛光 www.langmanzg.com

7、HAVING
浪漫烛光 www.langmanzg.com

8、select 列表
浪漫烛光 www.langmanzg.com

9、DISTINCT
浪漫烛光 www.langmanzg.com

10、order by
浪漫烛光 www.langmanzg.com

--当然后很多特殊的。
浪漫烛光 www.langmanzg.com

3.如何比较两个存储过程是否一致?
浪漫烛光 www.langmanzg.com

;with t as(
浪漫烛光 www.langmanzg.com

select count(b.definition) as cnt
浪漫烛光 www.langmanzg.com

from sys.objects As a
浪漫烛光 www.langmanzg.com

Inner Join sys.sql_modules As b On b.object_id=a.object_id  
浪漫烛光 www.langmanzg.com

where a.is_ms_shipped=0  And a.type='P' and name in('p1','p2')
浪漫烛光 www.langmanzg.com

)
浪漫烛光 www.langmanzg.com

select case when cnt=1 then'一致' else '不一致' end from t
浪漫烛光 www.langmanzg.com

--这题主要是自己想象,比如:除內容外,有时间等信息的判斷
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

4.根据某个字段,如何查詢到对应的表和字段及数据库?
浪漫烛光 www.langmanzg.com

    如,給出值"798DACD1-8160-45FF-B3E4-9F4840578CDB",要求查詢出"798DACD1-8160-45FF-B3E4-9F4840578CDB"所在的表名,字段名,数据库名.
浪漫烛光 www.langmanzg.com

--用游标遍历
浪漫烛光 www.langmanzg.com

declare @sql varchar(800)  
浪漫烛光 www.langmanzg.com

set @sql='798DACD1-8160-45FF-B3E4-9F4840578CDB' --要搜索的字符串   
浪漫烛光 www.langmanzg.com

declare @sql varchar(8000)     
浪漫烛光 www.langmanzg.com

declare tablecursor cursor local for
浪漫烛光 www.langmanzg.com

select sql='if exists ( select 1 from ['+ s.name + '].['+o.name+'] where ['+c.name+'] like ''%'+@sql+'%'' )
浪漫烛光 www.langmanzg.com

print ''所在的表及字段:['+o.name+'].['+c.name+']'''  
浪漫烛光 www.langmanzg.com

from sys.syscolumns c
浪漫烛光 www.langmanzg.com

join sys.objects o on c.id=o.object_id   
浪漫烛光 www.langmanzg.com

join sys.schemas s on o.schema_id = s.schema_id
浪漫烛光 www.langmanzg.com

where s.name != 'sys' and  o.type='u' and c.status>=0 and c.xusertype in (167,175, 239, 231)
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

open tablecursor      
浪漫烛光 www.langmanzg.com

fetch next from tablecursor into @sql  
浪漫烛光 www.langmanzg.com

while @@fetch_status=0  
浪漫烛光 www.langmanzg.com

begin   
浪漫烛光 www.langmanzg.com

    exec( @sql )   
浪漫烛光 www.langmanzg.com

    fetch next from tablecursor into @sql
浪漫烛光 www.langmanzg.com

end      
浪漫烛光 www.langmanzg.com

close tablecursor   
浪漫烛光 www.langmanzg.com

deallocate tablecursor  
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

5.查詢与更新执行缓慢,常見原因有哪些?
浪漫烛光 www.langmanzg.com

--这个有很多吧,简单说下
浪漫烛光 www.langmanzg.com

    1、内存不足,硬件不行,或者没有足够的内存供 SQL Server 使用。
浪漫烛光 www.langmanzg.com

    2、是否为查询优化器提供了优化复杂查询的最有利条件
浪漫烛光 www.langmanzg.com

    3、考虑使用磁盘条带化。使用 0 级 RAID(独立磁盘冗余阵列)可实现磁盘条带化,在这种 RAID 上,数据分布在多个磁盘驱动器上。
浪漫烛光 www.langmanzg.com

    4、网络通讯不好
浪漫烛光 www.langmanzg.com

    5、缺少有用的统计信息、索引、索引视图、数据条带化、分区等,当然这些东西滥用则会成为累赘
浪漫烛光 www.langmanzg.com

    6、磁盘配置了,如tempdb 的配置--这个只是了解些,呵呵
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

6.如何通过SQL脚本來,变更某一个数据库文件名(物理文件)?
浪漫烛光 www.langmanzg.com

--修改数据库名称
浪漫烛光 www.langmanzg.com

sp_renamedb '老名字','新名字'
浪漫烛光 www.langmanzg.com

--or
浪漫烛光 www.langmanzg.com

alter database 老数据库名字 modify name=新数据库名字
浪漫烛光 www.langmanzg.com

--修改文件名称以及文件位置,大小等使用 alter database 语句
浪漫烛光 www.langmanzg.com

alter database 数据库名称modify file(name='旧文件名',newname='新文件名',filename='新路径')
浪漫烛光 www.langmanzg.com

--写一个例子
浪漫烛光 www.langmanzg.com

use master
浪漫烛光 www.langmanzg.com

go
浪漫烛光 www.langmanzg.com

create database db
浪漫烛光 www.langmanzg.com

go
浪漫烛光 www.langmanzg.com

sp_renamedb 'db','new_db'
浪漫烛光 www.langmanzg.com

go
浪漫烛光 www.langmanzg.com

use new_db
浪漫烛光 www.langmanzg.com

go
浪漫烛光 www.langmanzg.com

--这时候文件名是
浪漫烛光 www.langmanzg.com

select name from  sysfiles
浪漫烛光 www.langmanzg.com

/*
浪漫烛光 www.langmanzg.com

db
浪漫烛光 www.langmanzg.com

db_log
浪漫烛光 www.langmanzg.com

*/
浪漫烛光 www.langmanzg.com

--只是数据库名字被修改了,如果想要修改.mdf和.ldf文件名则需要使用下面的语句
浪漫烛光 www.langmanzg.com

alter database new_db modify file(name='db',newname='new_db')
浪漫烛光 www.langmanzg.com

alter database new_db modify file(name='db_log',newname='new_db_log')
浪漫烛光 www.langmanzg.com

select name from  sysfiles
浪漫烛光 www.langmanzg.com

/*
浪漫烛光 www.langmanzg.com

new_db
浪漫烛光 www.langmanzg.com

new_db_log
浪漫烛光 www.langmanzg.com

*/
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

1,关于在存储过程中的变量和赋值:
浪漫烛光 www.langmanzg.com

变量形如@a,
浪漫烛光 www.langmanzg.com

而SELECT @Value = [Value] FROM [Pub_Option] WHERE [Key]='MsUFData' 的含义是:
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

从当前数据库的Pub_Option表中取出Key字段的值为'MsUFDate'的记录的Value字段的值并且复制给变量@Value。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

【5.6】
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

1,有关平台数据库设计,分为两个表:BS_Menu和BS_Function 前者存储的是以菜单为基准的功能类别编码信息,而后者存储的是以用户权限为基准的平台模块功能类别编码信息。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

注意:在BS_Menu表中,如果Url字段为空,那么新增的菜单项目将不会在菜单上显示。这一点搞了好几天都没有看明白。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

【5.11】
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

1,菜单表Menu和权限表Function没有刷新,并非是因为上述原因,而是说没有清空缓存,可用专门的方法执行调试。
浪漫烛光 www.langmanzg.com


浪漫烛光 www.langmanzg.com

2,在应用时,遇到了一个问题,就是Y=oWAc|RQ2S )LJ'说运行存储过程时提示找不到存储过程,最终发现这个问题是这样的,因为我的ASP.net网站中根目录下的web.config文件中连接的数据库仍然是远程数据库,而远程服务器上并未有我新加的这个存储过程,所以产生错误。可在web.config中配置,将连接字符串设置到本地进行设置。值得一提的是,如果要连接的本地数据库,其连接字的server一项一定要写 (local) 加括号,才可以。



  每当你几乎快被困难击倒,丧失斗志的时候,你就想想背后还有无数等你倒下捅刀子的SB,就充满了力量。
新用户注册   返回首页
首页  上一页  下一页  尾页  页次1/1   转到第