SQL Server 2005基础知识详细整理

2023-12-07 0 310

1. ACID:指数据库事务正确执行的四个基本要素缩写:1.原子性2.一致性3.隔离性4.持久性


2.数据库对象:表(table) 视图(view) 存储过程(stored procedure) 函数(function)索引(index)


3.SQL Server 2005中包含master、model、msdb、tempdb四个系统数据库。


4.使用T-SQL语句创建数据库:CREATE DATABASE [ApressFinacial] ON PRIMARY ( NAME = N\’ApressFinacial\’, FILENAME = N\’I:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\DATA\\ApressFinacial.mdf\’ , SIZE = 3072KB , FILEGROWTH = 1024KB )LOG ON ( NAME = N\’ApressFinacial_log\’, FILENAME = N\’I:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\DATA\\ApressFinacial_log.ldf\’ , SIZE = 1024KB , FILEGROWTH = 10%)


5.T-SQL语句删除数据库:drop database[数据库名]


6.常见的约束类型:主键约束、唯一约束、检查约束、默认约束、外键约束。


7.添加约束的语法: Alter table 表名 Add constraint 约束名 约束类型 具体的约束说明


8.删除约束:alter table 表名 Drop constraint 约束名


9.授权语法: grant 权限[on 表名] to 数据库用户 例:grant select insert update On students to zhangsan


10.T-SQL语句创建登录名: Create login[yuan] With password=\’130125\’ Go


11.数据库完整性分为:实体完整性、域完整性、参照完整性、用户自定义完整性。


12.T-SQL 中的运算符:运算符含义=等于>大于<小于>=大于等于<=小于等于<>不等于!非通配符解释示例_一个字符A Like \’C_\’%任意长度的字符B Like \’CO_%\'[]括号中所指定范围内的一个字符C Like \’9W0[1-2]\'[^]不在括号中所指定范围内的一个字符D Like \’%[A-Z][^1-2]\’13.查询语句:select 列名 from 表名 where 条件 如:select* from students where no=1


14.插入数据行:insert [into]<表名> [列名]values<值列表> 例:intset into students(name,address,grade,email,sex) Values(\’长青菜\’,\’上海松江\’,5,\’zqc@souhu.com\’,\’男\’) 注意:(不能为标识列指定值,因为它的数字是自动增长的)


15.更新数据行:update <表名> set<列名=更新值> [where<更新条件>] 例:update students Set address=\’石家庄\’ Where address=\’保定\’


16.删除数据行: delete from<表名>[where<删除条件>] 例:delete from studentinfo where no=\’180108225\’


17.问题:如果标识列A的初始值为1,增长量为2,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始? ( 7 )


18.删除列: alter table student drop column address


19.Exists: if exists (select*from?where name=\’yuanDB\’) drop database stuDB


20.变量: 局部变量(必须以标记@作为前缀) 全局变量(必须以标记@@作为前缀) 全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。


21.局部变量声明: 例:Decalre @name vachar(8) decare @seat int 赋值:set @变量名=值或select@变量名=值 set @name=\’张三\’ Select @name=sname from students where no=\’1\’


22.逻辑控制语句: IF-ELSE语句 If(条件) Begin 语句1 语句2……….. End Else Begin 语句1 语句2……… End 注:else是可选的。


例: decalre @myavg float Select @myavg =AVG(course) from score Print\’平均分\’+convert(varchar(5),@myavg) If(@myavg>70) Begin Print \’本班成绩优秀,前三名成绩为:\’ Select top 3 * from score order by score desc End Else Begin Print \’本班成绩较差,后三名成绩为:\’ Select top 3 *from score order by score End


23.while循环语句: while(条件) Begin 语句1 语句2………. Break End 例:DECLARE @n int WHILE(1=1) –条件永远成立 BEGIN SELECT @n=COUNT(*) FROM score WHERE score<60 –统计不及格人数 IF (@n>0) UPDATE score –每人加2分 SET score=score+2 ELSE BREAK –退出循环 END print \’加分后的成绩如下:\’ SELECT * FROM score


24.case–end多分支语句 语法: case When 条件1 then 结果1 When 条件2 then 结果2 ………….. Else 其他结果 End 例:print \’ABCDE五级显示成绩如下:\’ Select studentID, 成绩=case When score<60 then\’E\’ When score between 60 and 69 then \’D\’ When score between 70 and 79 then \’C\’ Else \’A\’ End From score


25.批处理语句示例: SELECT * FROM stuInfo SELECT * FROM stuMarks UPDATE stuMarks SET writtenExam=writtenExam+2 GO


26.习题及答案: 习题内容:则根据如下规则对成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。90分以上: 不加分80-89分: 加1分70-79分: 加2分60-69分: 加3分60分以下: 加5分习题答案:SELECT * FROM score –原始成绩DECLARE @labAvg intWHILE(1=1)BEGIN UPDATE score SET score= CASE WHEN score<60 THEN score+5 WHEN score between 60 AND 69 THEN score+3 WHEN score between 70 AND 79 THEN score+2 WHEN score between 80 AND 89 THEN score+1 ELSE score END SELECT @labAvg=AVG(score) FROM score IF @labAvg>=85 BREAKENDSELECT * FROM score –加分后的成绩


27.把一个表中的数据复制到另一个表中: insert into <表名>(列名) Select <列名> From <源表名>


28.把查询结果放在新表中同时插入新的标识列: Select 列名 identity(数据类型,标识种子,标识增长量)as 列名 into 新表 from 原始表 例: select students.sname, students.saddress, students.semail, identity(int,1,1) as studentID into tongxunlu from students


29.更新数据行: 语法: update<表名> Set<列名=更新值> Where <更新条件> 例: update students Set address=\’软件学校\’ Where address=\’软件学院\’


30.问题:按多列排序:例:select no,name,address,grade From students Where sex in(1,0) Order by no,grade


31.字符串函数: Replace: select replace(\’莫勒可切.杨可\’,\’可\’,‘兰\’) 返回结果:莫勒兰切.杨兰 Upper: select upper(\’sql server 课程\’) 返回结果:SQL SERVER 课程 Getdate: select getdate()获取当前时间。 Dateadd: select dateadd(mm,4,\’01/01/2009\’) 返回结果:05/01/2009 Datename: select datename(dw,\’01/15/2000\’) 返回结果: Saturday


32.聚合函数:Max-min: select AVG(score) as 平均成绩,MAX(score) as 最高分,MIN(score) as最低分 from score where score>=60Count: select count(*)as 及格人数 from score Where score>=60


33. 分组查询: 复制代码 代码如下:select courseid,avg(score) as 课程平均成绩 From score Group by courseid34.习题: 假如成绩单中记录了学生的几次考试成绩,要查询每位学生的每门课的总成绩,怎么查?复制代码 代码如下:Select courseid,studentid,sum(score) as 总成绩 From score Group by courseid,studentid35.分组查询–HAVINGHaving:指定了组或聚合的搜索条件,常常与group by子句一起使用。例:复制代码 代码如下:select studentid as学员编号,avg(score)as 平均成绩 From score Group by studentid,couseid Having avg(score)>6036.多表查询——内联结 例:复制代码 代码如下:select students.smame, score.courseid, score.score From students,score Where students.scode=score.studentid37.多表联结——三表联结 例:复制代码 代码如下:select S.name as姓名,CS.coursename as课程,C.score as 成绩 from students As S Inner Join score as C ON(S.scode=C.studentid) Inner join course As CS ON(CS.courseid=C.courseid)38.多表联结查询——右外联结 例:复制代码 代码如下:select titles.title_id,Titles.title,publishers.pub_name From titles Right outer join publishers On titles.pub_id=publishers.pub_id39.银行案例——多表联结——左外联结:例:复制代码 代码如下: intsert into account(account.Cardid,account.score) Select users.cardid,2 From users Left Join account ON(account.cardid=users.cardid) Where account.cardid is NULL40.子查询: 例:复制代码 代码如下:select * from students Where scode>(select scode from students where Sname=\’张扬\’) GO41.例:内联结(等值联结)复制代码 代码如下:select sname from students Inner Join score ON students.scode=score.studentid Where score=60 GO 42.局部变量:例:将姓名为里斯的学生的学号,出生日期和平均成绩分别赋给局部变量@no_str @birthday_str @avgrade_num (用select语句来实现)复制代码 代码如下: Select @no_str=s_no,@birthday_str=s_birthday,@avgrade_num=s_avgrade From student where s_name=\’里斯\’43.自连接查询: 例:(注:student2为不存在,是创建的)复制代码 代码如下: Select student2.sno学号,student2.sname姓名,student2.ssex性别,student2.sspeciality专业,student2.savgrade平均成绩 From student,student2 Where student.sname=\’李好\’ and student.sspeciality=student2.sspeciality 44.声明局部变量:declare @变量名 数据类型


45.if语句 例:查询学号为457865的学生,如果成绩及格,则打印其姓名和成绩。复制代码 代码如下: Declare @no,char(8),@name char(8),@avgrade numeric(3,1) Set @no=\’457865\’ Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade>60.0 Begin Print @name Print @avgrade End Go46.if-else语句:对于给定学号的查询,如果平均成绩不及格则打印姓名和平均成绩,否则打印学号。复制代码 代码如下: Declare @no char(8),@name char(8),@avgrade numeric(3,1); Set @no=\’567\’; Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade<60.0 Begin Print @name Print @avgrade End Else Print @no Go47.多分支的if语句查询并实现分等级打印学生成绩复制代码 代码如下: Declare @no char(8),@name char(8),@avgrade numeric(3,1); Set @no=\’567\’; Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade>=90.0 Print ‘优秀\’ Else if @avgrade>=80.0 ……………. Else print ‘不及格\’ Go48.case 语句 使用select语句查询学生的学号,然后用case函数对学生的姓名和爱好进行简要说明。 Select 学号=sno,姓名及爱好= Case sno When ‘123\’ then ‘李好,游泳\’ 。。。。。。。 Else ‘没有这人\’ End From student


49.while语句 (如果学生平均成绩低于85分,则循环执行对每位学生成绩加0.5%,在循环过程中,如果最高成绩超过95分则退出循环;在加分过程中,当成绩的平均成绩大于或等于80分时打印出当前成绩的平均成绩)复制代码 代码如下: Declare @avgrade numeric(3,1); Set @avgrade=(select avg(savgrade) from student) While @avgrade<85 Begin Update student Set savgrade=savgrade+savgrade*0.005 Set @avgrade=(select avg(savgrade) from student) If @avgrade>95 Break –退出循环 if@avgrade<80 continue –结束本次循环 print @avgrade End50.子查询:查询成绩刚好通过60分的学生 Select sname from students Inner Join score —内连接 ON students.scode=score.studentid Where score=60 Go


51.事务的特性:原子性、一致性、隔离性、永久性。 事务分类:显示事务、隐性事务、自动提交事务。


52.系统存储过程的名称都以“sp_”开头或“xp_”开头。 EXEC sp_databases 列出当前系统的数据库 EXEC sp_help students 查看表students的信息


53.定义存储过程的语法: Create proc[edure] 存储过程名 @参数1 数据类型=默认值 output, ………………. @参数n 数据类型=默认值 output As SQL语句 Go (注:参数可选,参数分输入参数、输出参数,输入参数允许有默认值)


54.创建不带参数的存储过程: 例:复制代码 代码如下: Creat procedure pro_stu As Declare @myAvg float Select @myAvg=AVG(score) From score Print \’平均分:\’+convert(varchar(5),@myAvg) If(@myAvg>70) Print \’本班考试成绩:优秀\’ Else Print \’本班考试成绩:较差\’ Print \’———————————————————–\’ Print \’参加本次考试没有通过的学员:\’ Select name,scode,score From students inner Join score on Students.scode=score.studentid where score<60 GO 55.调用存储过程: 语法: EXEC 过程名[参数] 例:EXEC proc_stu


56.输入参数的默认值: 例:复制代码 代码如下: Create procedure proc_stuMn @scorePass int=60 —及格线默认为60分 As Print \’及格线:\’ +convert(varchar(5),@scorePass) Print \’参加本次考试没有通过的学员:\’ Select name,scode,score From students Inner Join score On students.scode=score.studentid Where score<@scorePass Go 57.调用带参数默认值的存储过程: EXEC proc_stu ——-采用默认值 EXEC proc_stu 55 ——不采用默认值 EXEC proc_stu @scorePass=55


58.带输出参数的存储过程:复制代码 代码如下: Create procedure proc_stuM @notpassSum int output, @scorePass int=60 As Print\’及格线:\’+convert(varchar(5),@scorePass) Print \’参加本次考试没有通过的学员:\’ Select name,scode,score from students Inner Join score On students.scode=score.studentid Where score<@scorePass Select @notpassSum=count(studentid) From score where score<@scorePass GO59.调用带输出参数的存储过程:(注:调用时必须带output关键字,返回结果将存放在变量@sum 中)复制代码 代码如下: Declare @sum int EXEC proc_stuM @sum output,60 Print \’————————————————–\’ If @sum>=3 Print \’未通过人数:\’+convert(varchar(5),@sum )+\’人,超过60%,及格分数线还应下调\’ Else Print \’未通过人数:\’+convert(varchar(5),@sum )+\’人,已控制在60%以下,及格分数线适中\’ GO60.错误处理: 使用Raiserror语句:复制代码 代码如下: Create procedure pro_stuM @notpassSum int output, @scorePass int=60 As If(not @scorePass between 0 and 100) Begin Raiserror(\’及格线错误,请指定0—100之间的分数,统计中断退出\’,16,1) ——–引发系统错误,指定错误的严重级别16,调用状态为1(默认),并影响@@ERROR 系统变量的值 Return ——–立即返回,退出存储过程 End ……………其他语句同上例 Go 61.使用raiserror语句复制代码 代码如下: Declare @sum int,@t int EXEC proc_stum @sum output, 604 —-笔试及格线误输入604分 Set @t=@@error Print \’错误号:\’+convert(varchar(5),@t ) If @t<>o Return ——退出批处理,后续语句不再执行 Print \’———————————–\’ —–如果执行了raiseerror语句,系统全局@@error 将不等于0,表示出现了错误. If @sum>=3 Print \’未通过人数:\’+convert(varchar(5),@sum)+\’人,超过了60%,及格分数线还应下调\’ Else print \’未通过人数:\’+convert(varchar(5),@sum)+\’人,已控制在60%以下,及格分数线适中\’ GO 62.调用存储过程: 例:复制代码 代码如下: Declare @s int Exec proc_stuinfo \’张三\’ ,@s , 30 ———错误!应为(exec proc_stuinfo \’张三\’,@s output,30) Exec proc_stuinfo \’张三\’ ,@s ————错误!应为(exec proc_stuinfo \’张三\’,@s output) Exec proc_stuinfo @sAge=22,@stuName=\’李四\’,@m=@s output(正确!)


63.带输出参数的存储过程: 例:复制代码 代码如下: Declare @sum int Exec proc_stuM @sum output,60 Print \’—————————————–\’ If @sum>=3 Print\’未通过人数:\’+convert(varchar(5),@sum )+\’人,超过60%,及格分数线还应下调\’ Else Print\’未通过人数:\’+convert(varchar(5),@sum )+\’人,已控制在60…60%以下,及格分数线适中\’ GO64.创建触发器语法: 复制代码 代码如下:Create trigger trigger_name On table_name [with encryption] ——–表示加密触发器定义的SQL文本 For [delete,insert,update] ——-指定触发器类型 As T_SQL语句 GO 65.Insert 触发器 例:复制代码 代码如下: Create trigger trig_transInfo On transInfo For insert As Declare @type char(4),@outMoney Money Declare @myCardID char(10),@balance Money Declare @currentMoney money Select @type=transType,@outMoney=transMoney,@myCardID=cardID from inserted If(@type=\’支取\’) Update bank set currentMoney=currentMoney-@outMoney Where cardID=@myCardID Else Update bank set currentMoney=currentMoney+@outMoney Where cardID=@myCardID66. 插入一条语句 例:复制代码 代码如下: Insert into transInfo(transType,transMoney,cardID) Values (\’支取\’,200,\’10011001\’)67. Delete触发器示例: Create trigger tri_delete_transInfo On transInfo For delete As Print \’开始备份数据,请稍候……\’ If not exists(select * from sysobjects where name=\’backupTable\’) Select * into backupTable from deleted ————从deleted表中获取被删除的交易记录。 Else Insert into backupTable select * from deleted Print \’备份数据成功,备份表中的数据为:\’ Select * from backupTable Select * from transInfo GO


68. Update 触发器:复制代码 代码如下: Create trigger trig_update_bank On bank For update As Declare @beforeMoney Money,@afterMoney Money Select @beforeMoney=currentMoney from deleted ——-(从deleted表中获取交易前的金额,从inserted表中获取交易后的余额) Select @afterMoney=currentMoney from inserted If ABS(@afterMoney-@beforeMoney)>20000 ——交易金额是否>2万 Begin Print \’交易金额:\’+convert(varchar(8), ABS(@afterMoney-@beforeMoney)) Raiserror (\’每笔交易不能超过2万元,交易失败\’,16,1) Rollback transaction ————回滚事务,撤销交易 End Go69. 列级update触发器复制代码 代码如下: Create trigger trig_update_transIfo ON transInfo For update As If update(transDate) Begin ——-检查是否修改了交易日期列transDate Print \’交易失败……\’ Raiserror(\’安全警告:交易日期不能修改,由系统自动产生\’,16,1) Rollback transaction ———-回滚事务,撤销交易 End GO70.数据库阶段数据管理的主要特点:1.采用数据模型表示复杂的数据结构;2.有较高的数据独立性;3.为用户提供了方便的用户接口;4.提供数据控制功能;5.增加系统 的灵活性。


71. DB(数据库):存储在计算机内有组织的、统一管理的相关数据的集合。 DBMS(数据库管理系统):位于用户与操作系统之间的数据管理软件。 DBS(数据库系统):是实现有组织的、动态的存储大量关联数据,以方便用户访问计算就硬件、软件和株距资源组成的计算机系统。


72.物理数据独立性和逻辑数据独立性: 物理数据独立性:内模式的修改,只需对模式/内模式映象做相应修改,而不需修改 概念模式。逻辑数据独立性:概念模式的修改,只需对外模式/模式映象做相应修改,而不需修改外模式。


73. DBMS的主要功能: 数据定义(DDL):三级结构、两级映象、完整性约束等。数据操纵(DML):检索、更新。数据保护:数据恢复、并发控制、完整性控制、安全性控制等。数据维护:数据载入、转换、存储、、性能监控等。数据字典(DD):存储三级结构定义的数据库称为DD,即系统数据库。DBMS主要功能:数据库定义功能、数据存取功能、数据库运行管理功能、数据库的建立和维护功能。


74.–1、创建存储过程–复制代码 代码如下:if exists (select * from sysobjects where name=\’Sum_wage\’)drop procedure Sum_wageGOcreate procedure Sum_wage @PWage int,@AWage int,@total intas while (1=1)beginif (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage)update ProWage set @total=@total+@AWage,Wage=Wage+@AWageelsebreakendprint\’一共加薪:\’+convert(varchar,@total)+\’元\’print\’加薪后的程序员工资列表:\’select * from ProWage–调用存储过程1–exec Sum_wage @PWage=2000,@AWage=100,@total=0exec Sum_wage @PWage=2200,@AWage=100,@total=0exec Sum_wage @PWage=3000,@AWage=100,@total=0exec Sum_wage @PWage=4000,@AWage=100,@total=0exec Sum_wage @PWage=5000,@AWage=100,@total=0exec Sum_wage @PWage=6000,@AWage=100,@total=075.复制代码 代码如下:if exists (select * from sysobjects where name=\’Avg_wage\’)drop procedure Avg_wageGOcreate procedure Avg_wage @PWage int,@AWage int,@total intas while (1=1)beginif ((select Avg(Wage) from ProWage)<=@PWage)update ProWage set @total=@total+@AWage,Wage=Wage+@AWageelsebreakendprint\’一共加薪:\’+convert(varchar,@total)+\’元\’print\’加薪后的程序员工资列表:\’select * from ProWage–调用存储过程–exec Avg_wage @PWage=3000,@AWage=200,@total=0exec Avg_wage @PWage=4500,@AWage=200,@total=076.代码:复制代码 代码如下:INSERT INTO studentinformation(S_name,S_no,S_grade,S_address)VALUES(\’花无影\’,25,\’软件0802班\’,\’河北\’)select studentinformation.S_name,studentinformation.S_nointo information2from studentinformationselect S_no,S_grade,S_namefrom studentinformationwhere S_school=\’软件学院\’order by S_noselect S_no,S_name,S_classfrom studentinformationwhere S_sex=\’男\’and S_name<>\’花无影\’order by S_noSELECT top 20 percent sname as 姓名,sno as 学号,saddress as 地址FROM yuanWHERE sschool =\’软件学院\’ORDER BY sno asc,sname descselect charindex(\’data\’,\’my data is set\’,1) (data的索引位置)select len(\’java xuexibiji\’) (字符串长度)select lower(\’BAO DING DIANLI ZHI YE JI SHU XUE YUAN\’) (转换成小写)select replace(\’软件学院\’,\’软件学院\’,\’软件工程学院\’) (替换)select stuff(\’a b c d e f g h i j k l m n\’,3,6,\’今天的学习内容\’) (从第三字符个开始替换,替换6个字符)select getdate() (当前日期)select dateadd(dd,250,\’04/12/2009\’) (250天后的日期)select datediff(mm,\’04/20/2005\’,\’08/05/2010\’) (相差的月数)select datename(dw,\’04/12/2009\’) (返回星期几)select datepart(dd,\’04/12/2009\’) (返回当天是几号)select abs(-10) 绝对值select ceiling(-32.8) 返回大于或等于该数的最小整数select power(102,3) 取数值表达式的幂值select round(3.141592653,4) (?)将数值表达式四舍五入成指定精度select sign(1000) 正数返回1,负数返回-1,0返回0.select sqrt(6.25) //返回该数据的平方根select convert(varchar(100),45678932) //转变数据类型 select current_user //返回当前用户的名字select datalength(\’软件学院\’) //返回字符长度select host_name()   //返回用户登录的计算机名select system_user //返回登录的用户名select user_name(1) //从任意数据库中返回dbo(jizhu)create proc pro_stu@scorepass floatasprint \’学号\’+convert(varchar(5),@scorepass)select namefrom stuentwhere student.score=@scorepassgoexec pro_stu @scorepass=8576.导出SQL Server数据库中数据:复制代码 代码如下:declare @objectId int set @objectId=object_id(\’sun\’) if @objectId is not null begin drop proc sun end go create proc sun (@tablename varchar(256)) as begin set nocount on declare @sqlstr varchar(4000) declare @sqlstr1 varchar(4000) declare @sqlstr2 varchar(4000) select @sqlstr=\’select \’\’insert \’+@tablename select @sqlstr1=\’\’ select @sqlstr2=\'(\’ select @sqlstr1=\’values (\’\’+\’ select @sqlstr1=@sqlstr1+col+\’+\’\’,\’\’+\’ ,@sqlstr2=@sqlstr2+name +\’,\’ from (select case when a.xtype =173 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(\’+convert(varchar(4),a.length*2+2)+\’),\’+a.name +\’)\’+\’ end\’ when a.xtype =104 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(1),\’+a.name +\’)\’+\’ end\’ when a.xtype =175 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’replace(\’+a.name+\’,\’\’\’\’\’\’\’\’,\’\’\’\’\’\’\’\’\’\’\’\’)\’ + \’+\’\’\’\’\’\’\’\’\’+\’ end\’ when a.xtype =61 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’convert(varchar(23),\’+a.name +\’,121)\’+ \’+\’\’\’\’\’\’\’\’\’+\’ end\’ when a.xtype =106 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(\’+convert(varchar(4),a.xprec+2)+\’),\’+a.name +\’)\’+\’ end\’ when a.xtype =62 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(23),\’+a.name +\’,2)\’+\’ end\’ when a.xtype =56 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(11),\’+a.name +\’)\’+\’ end\’ when a.xtype =60 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(22),\’+a.name +\’)\’+\’ end\’ when a.xtype =239 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’replace(\’+a.name+\’,\’\’\’\’\’\’\’\’,\’\’\’\’\’\’\’\’\’\’\’\’)\’ + \’+\’\’\’\’\’\’\’\’\’+\’ end\’ when a.xtype =108 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(\’+convert(varchar(4),a.xprec+2)+\’),\’+a.name +\’)\’+\’ end\’ when a.xtype =231 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’replace(\’+a.name+\’,\’\’\’\’\’\’\’\’,\’\’\’\’\’\’\’\’\’\’\’\’)\’ + \’+\’\’\’\’\’\’\’\’\’+\’ end\’ when a.xtype =59 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(23),\’+a.name +\’,2)\’+\’ end\’ when a.xtype =58 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’convert(varchar(23),\’+a.name +\’,121)\’+ \’+\’\’\’\’\’\’\’\’\’+\’ end\’ when a.xtype =52 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(12),\’+a.name +\’)\’+\’ end\’ when a.xtype =122 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(22),\’+a.name +\’)\’+\’ end\’ when a.xtype =48 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(6),\’+a.name +\’)\’+\’ end\’ when a.xtype =165 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’convert(varchar(\’+convert(varchar(4),a.length*2+2)+\’),\’+a.name +\’)\’+\’ end\’ when a.xtype =167 then \’case when \’+a.name+\’ is null then \’\’NULL\’\’ else \’+\’\’\’\’\’\’\’\’\’+\’+\’replace(\’+a.name+\’,\’\’\’\’\’\’\’\’,\’\’\’\’\’\’\’\’\’\’\’\’)\’ + \’+\’\’\’\’\’\’\’\’\’+\’ end\’ else \’\’\’NULL\’\’\’ end as col,a.colid,a.name from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36 )t order by colid select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+\’) \’+left(@sqlstr1,len(@sqlstr1)-3)+\’)\’\’ from \’+@tablename print @sqlstr exec( @sqlstr) set nocount off end go

您可能感兴趣的文章:

  • SqlServer 基础知识 数据检索、查询排序语句
  • SQL Server存储过程的基础说明
  • MySQL数据库 JDBC 编程(Java 连接 MySQL)
  • MySQL 数据库的基础知识
  • 一篇文章带你了解MySQL数据库基础
  • SQL Server 数据库基础编程详解

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 MsSql SQL Server 2005基础知识详细整理 https://www.u-9.cn/database/mssql/123820.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务