--sqlserver 2000
SELECT 表名=case when a.colorder=1 then d.name else '' end,
--字段序号=a.colorder,
字段名=a.name,
--
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
/**/
主键=case when exists(SELECT 1 from sysobjects where xtype='PK' and name
in ( SELECT name from sysindexes WHERE indid
in( SELECT indid from sysindexkeys WHERE id = a.id AND colid=a.colid )))
then '√' else '' end,
类型=b.name,
--占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空=case when a.isnullable=1 then '√'else '' end,
默认值=isnull(e.text,''),
字段说明=isnull(g.[value],'')
from syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id
and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id left join sysproperties g on a.id=g.id
and a.colid=g.smallid
order by a.id,a.colorder
- ......
SQL获取所有数据库名、表名、储存过程以及参数列表
1.获取所有数据库名:
(1)、Select Name from Master..SysDatabases order by Name
2.获取所有表名:
(1)、Select Name from SysObjects Where XType=''U'' orDER BY Name
XType=''U'':表示所有用户表;
XType=''S'':表示所有系统表;
(2)、SELECT name from sysobjects WHERE type = ''U'' AND sysstat = ''83''
注意:一般情况只需要type = ''U'',但有时候会有系统表混在其中(不知道什么原因),加上后面一句后就能删除这些系统表了
3.获取所有字段名:
(1)、Select Name from SysColumns Where id=Object_Id(''TableName'')
(2)、SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length from syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND "syscolumns.id = object_id(''tableName'')
注意点:
&nb ......
如果SQL Server程序员想将表达式从一种换为另一种,他可以从SQL Server 7和2000中自带的两种功能中做出选择。
在存储过程或其他情况下,我们常常需要将数据从datetime型转化成varchar型;CONVERT和CAST就可以用于这种情况。
由于SQL Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很容易让人困惑了。
CONVERT是专对SQL Server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。
CAST是两种功能中更具ANSI标准的功能,即虽然更具便携性(比如,使用CAST的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用CAST。因此,我建议首先使用CAST,如果遇到必须使用CONVERT的情况时再使用CONVERT。
CAST和CONVERT还能联合使用,达到特殊的效果。比如,在current date下生成char变量一般使用以下方法:
SELECT CONVERT(CHAR(10), CURRENT_TIMESTAMP, 102)
(102表明使用了ANSI日期模式,即yy.mm.dd型)
然而,如果你希望将这个变量明确生成为datetime或smalldatetime变量,以此在特定的数据库栏中兼容,那么你可以使用以下语句:
SELE ......
1.sql是一种脚本语言
2.sql可写脚本程序,但最重要的作用发挥在对数据库的操作上
3.sql server2005中的注释有两种/***/多行注释,--可以单行注释
4.sql中的自定义变量以@开头,系统变量以@@开头
5.sql中声明变量和VB类似,使用declare声明变量如:declare @i int,@j int,此语句声明了2个整形变量@i和@j
6.sql中的数据类型和数据库中的类型一样,注意区别char(固定Ascii编码长度的字符),varchar(可变的ascii编码长度),nchar(固定的unicode编码)和nvarchar(可变的unicode编码)这几个类型
比如:
declare @ s1 char(10)
declare @s2 varchar(10)
如果给以上2个变量都赋值abc,则写进数据库时,@s1写的就是abc+7个空格,而@s2写的只是abc
再比如:declare @s1 varchar(4),@s2 nvarchar(4),
set @s1='中国’正确,但set @s1=“中国人'错误 ,@s1最多可以放4个字符或2个汉字(一个汉字占2个字符)
而@s2可以最多可以放8个字符或4个汉字(这也就体现了ascii和unicode编码的区别)
7.sql中有if条件判断,无swith判断,但又case...when(较少用)
8.循环使用while,无for
9.循环体用begin开始,end结束
以下是我的学习笔记,语 ......
例如:
普遍的SQL语句:
update book set bookname='sssss' where bookId=1;
在PL/SQL 中执行:
declare
v_bookId number;
begin
v_bookId :=1;
update book set bookname='sssss' where bookId=v_bookId;
end;
1,select
在PL/SQL 程序中,使用select ...into 语句查询一个记录的信息,其语法为:
select select_list_item into variable_list | record_variable from table where condition;
例如:根据书名或书号查找书的信息。
declare
v_bookId book.bookId%type;
......
在Oracle中,如果在sql中出现'&'符号,会被自动转义;
而被要求输入在&符号后跟随的字符串的值,例如:
update tablename set columnName='http://www.g.cn/cv2.jsp?spid=222&cid=333';
执行这个操作时,Oracle会提示
Enter value for cid:
原因是在Oracle中 & 符号是作为转义字符使用的。
解决方法:
用Oracle的字符串处理函数chr处理。chr(38)表示 &符号
改写:
update tablename set columnName='http://www.g.cn/cv2.jsp?spid=222'||chr(38)||'cid=333';
由此联想开去,在数据库中存入html的一些符号式,很可能都会出现这种情况,那么如法炮制即可,如果有些符号的编码不知道的,可以通过下面的方法来查询:
select ascii('&') from dual; ......
在Oracle中,如果在sql中出现'&'符号,会被自动转义;
而被要求输入在&符号后跟随的字符串的值,例如:
update tablename set columnName='http://www.g.cn/cv2.jsp?spid=222&cid=333';
执行这个操作时,Oracle会提示
Enter value for cid:
原因是在Oracle中 & 符号是作为转义字符使用的。
解决方法:
用Oracle的字符串处理函数chr处理。chr(38)表示 &符号
改写:
update tablename set columnName='http://www.g.cn/cv2.jsp?spid=222'||chr(38)||'cid=333';
由此联想开去,在数据库中存入html的一些符号式,很可能都会出现这种情况,那么如法炮制即可,如果有些符号的编码不知道的,可以通过下面的方法来查询:
select ascii('&') from dual; ......