1 按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.分页 SQL 语句 select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 结束位置 3.获取当前数据库中的所有用户表 select * from sysobjects where xtype='U' and category=0 4.获取某一个表的所有字段 select name from syscolumns where id=object_id('表名') 5.查看与某一个表相关的视图、存储过程、函数 select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%' 6.查看当前数据库中所有存储过程 select name as 存储过程名称 from sysobjects where xtype='P' 7.查询用户创建的所有数据库 select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa') 或者 select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01 8.查询某一个表的字段和数据类型 select column_name,data_type from information_schema.columns where table_name = '表名' 9.使用事务 在使用一些对数据库表的临时的 SQL 语句操作时,可以采用 SQL SERVER 事务处理,防止对 数据操作后发现误操作问题 开始事务 Begin tran Insert Into TableName Values(…) SQL 语句操作不正常,则回滚事务。 回滚事务 Rollback tran SQL 语句操作正常,则提交事务,数据提交至数据库。 提交事务 Commit tran 10. 按全文匹配方式查询 字段名 LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%' OR 字段名 LIKE N'%[^a-zA-Z0-9]China'
OR 字段名 LIKE N'China[^a-zA-Z0-9]%' OR 字段名 LIKE N'China 11.计算执行 SQL 语句查询时间 declare @d datetime set @d=getdate() select * from SYS_ColumnProperties 秒)]=datediff(ms,@d,getdate())
select
[ 语 句 执 行 花 费 时 间 ( 毫
12、说明:几个高级查询运算词 A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行 而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL) ,不消除重复行。两 种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生 出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出 一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 1、 在查询分析器下查询 Excel 文档 SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\测试.xls"; User ID=Admin;Password=;Extended properties=Excel 8.0')...Sheet1$ 2、从数据库中导出数据并存到文件中 EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:\temp1.xls -c -q -S"." -U"sa" -P""' EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:\temp1.txt -c -q -S"." -U"sa" -P""' 3、从文件中导入数据到数据库对应表中 EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:\temp1.xls -c -q -S"." -U"sa" -P""' EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:\temp1.txt -c -q -S"." -U"sa" -P""' 2、 技巧一: 技巧一: 3、 问题类型: ACCESS 数据库字段中含有日文片假名或其它不明字符时查询会提示内存 溢出。
4、
解决方法:修改查询语句
sql="select * from ada where alice like '%"&abigale&"%'"
5、
改为
sql="select * from ada" rs.filter = "alice like '%"&abigale&"%'"
6、 7、
技巧二: 技巧二: 问题类型:如何用简易的办法实现类似百度的多关键词查询(多关键词用空格或其 它符号间隔)。
8、
解决方法:
'//用空格分割查询字符串 ck=split(abigale," ") '//得到分割后的数量 sck=UBound(ck) sql="select * ada where"
9、
在一个字段中查询
For i = 0 To sck SQL = SQL & tempJoinWord & "(" & _ "alice like '"&ck(i)&"%')" tempJoinWord = " and " Next
10、
在二个字段中同时查询
For i = 0 To sck SQL = SQL & tempJoinWord & "(" & _ "alice like '"&ck(i)&"%' or " & _ "alice1 like '"&ck(i)&"%')" tempJoinabigale = " and " Next
11、
技巧三: 技巧三:提高查询效率的几种技巧
12、 13、
1. 尽量不要使用 or,使用 or 会引起全表扫描,将大大降低查询效率。 2. 经过实践验证, charindex()并不比前面加%的 like 更能提高查询效率, 并
且 charindex()会使索引失去作用(指 sqlserver 数据库) 14、 15、 16、 17、 18、 19、 3. alice like '%"&abigale&"%' 会使索引不起作用 like '"&abigale&"%' 会使索引起作用(去掉前面的%符号) (指 sqlserver 数据库) 4. '%"&abigale&"%' 与'"&abigale&"%' 在查询时的区别: 比如你的字段内容为:斯卡布罗集市 '%"&abigale&"%' :会通配所有字符串,不论查“集市”还是查“斯卡”,都
会显示结果。 20、 '"&abigale&"%' :只通配前面的字符串,例如查“集市”是没有结果的,只
有查“斯卡”,才会显示结果。 21、 5. 字段提取要按照“需多少、提多少”的原则,避免“select *”,尽量使
用“select 字段 1,字段 2,字段 3........”。实践证明:每少提取一个字段,数据的 提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。 22、 6. order by 按聚集索引列排序效率最高。一个 sqlserver 数据表只能建立一
个聚集索引,一般默认为 ID,也可以改为其它的字段。 23、 7. 为你的表建立适当的索引, 建立索引可以使你的查询速度提高几十几百倍。
(指 sqlserver 数据库) 24、 25、 以下是建立索引与不建立索引的一个查询效率分析: Sqlserver 索引与查询效率分析。
26、 27、 28、 29、 30、 31、 32、 33、 34、 35、 36、 37、
表 News 字段 Id:自动编号 Title:文章标题 Author:作者 Content:内容 Star:优先级 Addtime:时间 记录:100 万条 测试机器:P4 2.8/1G 内存/IDE 硬盘 方案 1: 主键 Id,默认为聚集索引,不建立其它非聚集索引
select * from News where Title like '%"&abigale&"%' or Author like '%"&abigale&"%' order by Id desc
38、 39、 40、 41、 42、
从字段 Title 和 Author 中模糊检索,按 Id 排序 查询时间:50 秒 方案 2: 主键 Id,默认为聚集索引 在 Title、Author、Star 上建立非聚集索引
select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%' order by Id desc
43、 44、 45、 46、 47、
从字段 Title 和 Author 中模糊检索,按 Id 排序 查询时间:2 - 2.5 秒 方案 3: 主键 Id,默认为聚集索引 在 Title、Author、Star 上建立非聚集索引
select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%' order by Star desc
48、 49、 50、 51、 52、
从字段 Title 和 Author 中模糊检索,按 Star 排序 查询时间:2 秒 方案 4: 主键 Id,默认为聚集索引 在 Title、Author、Star 上建立非聚集索引
select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%'
53、 54、 55、 56、
从字段 Title 和 Author 中模糊检索,不排序查询时间:1.8 - 2 秒 方案 5: 主键 Id,默认为聚集索引 在 Title、Author、Star 上建立非聚集索引
select * from News where Title like '"&abigale&"%'
57、
或
select * from News where Author like '"&abigale&"%'
58、 59、 60、 61、
从字段 Title 或 Author 中检索,不排序查询时间:1 秒 1)SEQNAME.NEXTVAL 里面的值如何读出来 可以直接在 insert into test values(SEQNAME.NEXTVAL) 是可以用这样: SELECT tmpdata_seq.NEXTVAL INTO id_temp FROM DUAL; 然后可以用 id_temp
62、
(2)PLS-00103: 出现符号 ">"在需要下列之一时:
代码如下: 63、 IF (sum>0) THEN begin INSERT INTO emesp.tp_sn_production_log VALUES (r_serial_number, , id_temp); EXIT; end; 64、 65、 66、 一直报 sum>0 这是个很郁闷的问题 因为变量用了 sum (3)oracle 语法 1. Oracle 应用编辑方法概览 所以不行, 后改为 i_sum>0
答:1) Pro*C/C++/... : C 语言和数据库打交道的方法,比 OCI 更常用; 2) ODBC 3) OCI: C 语言和数据库打交道的方法,和 ProC 很相似,更底层,很少用; 4) SQLJ: 很新的一种用 Java 访问 Oracle 数据库的方法,会的人不多;
5) JDBC 6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问; 67、 2. PL/SQL
答:1) PL/SQL(Procedual language/SQL)是在标准 SQL 的基础上增加了过程化处理的 语言; 2) Oracle 客户端工具访问 Oracle 服务器的操作语言; 3) Oracle 对 SQL 的扩充; 68、 4. PL/SQL 的优缺点
答:优点: 1) 结构化模块化编程,不是面向对象; 2) 良好的可移植性(不管 Oracle 运行在何种操作系统); 3) 良好的可维护性(编译通过后存储在数据库里); 4) 提升系统性能; 69、 70、 71、 第二章 PL/SQL 程序结构 1. PL/SQL 块
答:1) 申明部分, DECLARE(不可少); 2) 执行部分, BEGIN...END; 3) 异常处理,EXCEPTION(可以没有); 72、 2. PL/SQL 开发环境 ;toad 很好用
答:可以运用任何纯文本的编辑器编辑,例如:VI 73、 3. PL/SQL 字符集
答:PL/SQL 对大小写不敏感
74、
4. 标识符命名规则
答:1) 字母开头; 2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ; 3) 最大长度为 30 个字符(八个字符左右最合适); 75、 5. 变量声明
答:语法 Var_name type [CONSTANT][NOT NULL][:=value]; 注:1) 申明时可以有默认值也可以没有; 2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值; 3) 赋值语句为“:=”; 4) 变量可以认为是数据库里一个字段; 5) 规定没有初始化的变量为 NULL; 76、 第三章
1. 数据类型 答:1) 标量型:数字型、字符型、布尔型、日期型; 2) 组合型:RECORD(常用)、TABLE(常用)、VARRAY(较少用) 3) 参考型:REF CURSOR(游标)、REF object_type 4) LOB(Large Object) 77、 2. %TYPE
答:变量具有与数据库的表中某一字段相同的类型 例:v_FirstName studengts.first_name%TYPE; 78、 3. RECORD 类型 /*其中 TYPE,IS,RECORD 为关键字,
答:TYPE record_name IS RECORD( record_name 为变量名称*/
field1 type [NOT NULL][:=expr1], field2 type [NOT NULL][:=expr2], 有一个初始值*/ ... NULL fieldn type [NOT NULL][:=exprn]); 79、 4. %ROWTYPE
/*每个等价的成员间用逗号分隔*/ /*如果一个字段限定 NOT NULL,那么它必须拥
/*所有没有初始化的字段都会初始为
答:返回一个基于数据库定义的类型 DECLARE v_StuRec Student%ROWTYPE; 80、 /*Student 为表的名字*/
注:与 3 中定一个 record 相比,一步就完成,而 3 中定义分二步:a. 所有的
成员变量都要申明; b. 实例化变量; 81、 5. TABLE 类型
答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER; 例:DECLARE TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER; v_Student t_StuTable; BEGIN SELECT * INTO v_Student(100) FROM Student WHERE id = 1001; END; 注:1) 行的数目的限制由 BINARY_INTEGER 的范围决定; 82、 6. 变量的作用域和可见性
答:1) 执行块里可以嵌入执行块;
2) 里层执行块的变量对外层不可见; 3) 里层执行块对外层执行块变量的修改会影响外层块变量的值; 83、 84、 第四章 1. 条件语句
答:IF boolean_expression1 THEN ... ELSIF boolean_expression2 THEN ... 的*/ ELSE ... END IF; 85、 2. 循环语句 /*注意是 ELSIF,而不是 ELSEIF*/ /*ELSE 语句不是必须的,但 END IF;是必须
答:1) Loop ... IF boolean_expr THEN EXIT; END IF; END LOOP; 2) WHILE boolean_expr LOOP ... END LOOP; 3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP ... /* */ /* EXIT WHEN boolean_expr */ /* */
END LOOP; 注:a. 加上 REVERSE 表示递减,从结束边界到起始边界,递减步长为一; b. low_blound 86、 3. GOTO 语句 起始边界; high_bound 结束边界;
答:GOTO label_name; 1) 只能由内部块跳往外部块; 2) 设置标签:<
答:在语句块中加空语句,用于补充语句的完整性。示例: IF boolean_expr THEN ... ELSE NULL; END IF;
88、
5. SQL in PL/SQL
答:1) 只有 DML SQL 可以直接在 PL/SQL 中使用; 89、 90、 第五章 1. 游标(CURSOR)
答:1) 作用:用于提取多行数据集; 2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR 的内容必须是一条查询语句*/ b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id; 3) 打开游标:OPEN Cursor_name; 入 CURSOR; 4) 从游标中取数:a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、 类型、顺序要和 Table 中字段一致;*/ b. FETCH cursor_name INTO record_var; 注:将值从 CURSOR 取出放入变量中,每 FETCH 一次取一条记录; 5) 关闭游标: CLOSE Cursor_name; 注:a. 游标使用后应该关闭; b. 关闭后的游标不能 FETCH 和再次 CLOSE; c. 关闭游标相当于将内存中 CURSOR 的内容清空; 91、 2. 游标的属性 是否有值; /*相当于执行 select 语句,且把执行结果存
答:1) %FOUND:
2) %NOTFOUND: 是否没有值; 3) %ISOPEN: 是否是打开状态;
4) %ROWCOUNT: CURSOR 当前的记录号;
92、
3. 游标的 FETCH 循环
答:1) LOOP FETCH cursor INTO ... EXIT WHEN cursor%NOTFOUND; END LOOP; 2) WHILE cursor%FOUND LOOP FETCH cursor INTO ... END LOOP; 3) FOR var IN cursor LOOP FETCH cursor INTO... END LOOP; /*当 cursor 中没记录后退出*/
第六章 93、 1. 异常
答:DECLARE ... e_TooManyStudents EXCEPTION; ... BEGIN ... RAISE e_TooManyStudents; ... EXCEPTION WHEN e_TooManyStudents THEN /* 触发异常 */ /* 触发异常 */ /* 申明异常 */
... WHEN OTHERS THEN ... END; 94、 95、 PL/SQL 数据库编程(下) 1. 存储过程(PROCEDURE) /* 处理所有其他异常 */
答:创建过程: CREATE [OR REPLACE] PROCEDURE proc_name [(arg_name[{IN|OUT|IN OUT}]TYPE, arg_name[{IN|OUT|IN OUT}]TYPE)] {IS|AS} procedure_body 1) IN: 表示该参数不能被赋值(只能位于等号右边); 2) OUT:表示该参数只能被赋值(只能位于等号左边); 3) IN OUT: 表示该类型既能被赋值也能传值; 96、 2. 存储过程例子
答:CREATE OR REPLACE PROCEDURE ModeTest( p_InParm IN NUMBER, p_OutParm OUT NUMBER, p_InOutParm IN OUT NUMBER) IS v_LocalVar NUMBER; BEGIN v_LocalVar:=p_InParm; /* 执行部分 */ /* 声明部分 */
p_OutParm:=7; p_InOutParm:=7; ... EXCEPTION ... END ModeTest; /* 异常处理部分 */
3. 调用 PROCEDURE 的例子 答:1) 匿名块可以调; 2) 其他 PROCDEURE 可以调用; 例: DECLARE v_var1 NUMBER; BEGIN ModeTest(12, v_var1, 10); END; 注:此时 v_var1 等于 7 97、 4. 指定实参的模式
答:1) 位置标示法:调用时添入所有参数,实参与形参按顺序一一对应; 2) 名字标示法:调用时给出形参名字,并给出实参 ModeTest(p_InParm=>12, p_OutParm=>v_var1, p_Inout=>10); 注:a. 两种方法可以混用; b. 混用时第一个参数必须通过位置来指定。
98、
5. 函数(Function)与过程(Procedure)的区别
答:1) 过程调用本身是一个 PL/SQL 语句(可以在命令行中通过 exec 语句直接调用); 2) 函数调用是表达式的一部分; 99、 6. 函数的声明
答:CREATE [OR REPLACE] PROCEDURE proc_name [(arg_name[{IN|OUT|IN OUT}]TYPE, arg_name[{IN|OUT|IN OUT}]TYPE)] RETURN TYPE {IS|AS} procedure_body 注:1) 没有返回语句的函数将是一个错误; 100、 7. 删除过程与函数
答:DROP PROCEDURE proc_name; DROP FUNCTION func_name; 101、 102、 第八章 1. 包
答:1) 包是可以将相关对象存储在一起的 PL/SQL 的结构; 2) 包只能存储在数据库中,不能是本地的; 3) 包是一个带有名字的声明; 4) 相当于一个 PL/SQL 块的声明部分; 5) 在块的声明部分出现的任何东西都能出现在包中; 6) 包中可以包含过程、函数、游标与变量; 7) 可以从其他 PL/SQL 块中引用包,包提供了可用于 PL/SQL 的全局变量。 8) 包有包头和包主体,如包头中没有任何函数与过程,则包主体可以不需要。
103、
2. 包头
答:1) 包头包含了有关包的内容的信息,包头不含任何过程的代码。 2) 语法: CREATE [OR REPLACE] PACKAGE pack_name {IS|AS} procedure_specification|function_specification| variable_declaration|type_definition|exception_declaration| cursor_declaration END pack_name; 3) 示例: CREATE OR REPLACE PACKAGE pak_test AS PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE); TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER; END pak_test; 104、 3. 包主体
答:1) 包主体是可选的,如包头中没有任何函数与过程,则包主体可以不需要。 2) 包主体与包头存放在不同的数据字典中。 3) 如包头编译不成功,包主体无法正确编译。 4) 包主体包含了所有在包头中声明的所有过程与函数的代码。 5) 示例: CREATE OR REPLACE PACKAGE BODY pak_test AS PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS BEGIN ...
END RemoveStudent; TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER; END pak_test; 105、 4. 包的作用域
答:1) 在包外调用包中过程(需加包名):pak_test.AddStudent(100010, 'CS', 101); 2) 在包主体中可以直接使用包头中声明的对象和过程(不需加包名); 106、 5. 包中子程序的重载
答:1) 同一个包中的过程与函数都可以重载; 2) 相同的过程或函数名字,但参数不同; 107、 6. 包的初始化
答:1) 包存放在数据库中; 2) 在第一次被调用的时候,包从数据库中调入内存并被初始化; 3) 包中定义的所有变量都被分配内存; 4) 每个会话都将拥有自己的包内变量的副本。 108、 109、 第九章 1. 触发器
答:1) 触发器与过程/函数的相同点 a. 都是带有名字的执行块; b. 都有声明、执行体和异常部分; 2) 触发器与过程/函数的不同点 a. 触发器必须存储在数据库中; b. 触发器自动执行;
110、
2. 创建触发器
答:1) 语法: CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE|AFTER} triggering_event ON table_reference [FOR EACH ROW [WHEN trigger_condition]] trigger_body; 2) 范例: CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students DECLARE CURSOR c_Statistics IS SELECT * FROM students GROUP BY major; BEGIN ... END Up; 111、 3. 触发器
答:1) 三个语句(INSERT/UPDATE/DELETE); 2) 二种类型(之前/之后); 3) 二种级别(row-level/statement-level); 所以一共有 3 X 2 X 2 = 12 112、 4. 触发器的限制
答:1) 不应该使用事务控制语句; 2) 不能声明任何 LONG 或 LONG RAW 变量; 3) 可以访问的表有限。
SQLServer(多语句表值函数代码) 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[ufnGetContactInformation](@ContactID int) RETURNS @retContactInformation TABLE ( -- Columns returned by the function [ContactID] int PRIMARY KEY NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [JobTitle] [nvarchar](50) NULL, [ContactType] [nvarchar](50) NULL ) AS -- Returns the first name, last name, job title and contact type for the specified contact. BEGIN
DECLARE @FirstName [nvarchar](50), @LastName [nvarchar](50), @JobTitle [nvarchar](50), @ContactType [nvarchar](50); -- Get common contact information SELECT @ContactID = ContactID, @FirstName = FirstName, @LastName = LastName FROM [Person].[Contact] WHERE [ContactID] = @ContactID; SET @JobTitle = CASE -- Check for employee WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e WHERE e.[ContactID] = @ContactID) THEN (SELECT [Title] FROM [HumanResources].[Employee] WHERE [ContactID] = @ContactID) -- Check for vendor
SQLSERVER数据库操作 ******操作前,请确定SQL的服务已经开启******** 一:登录进入sql数据库 1、开始---所有程序---Microsoft SQL Server 2005---SQL Server Management Studio Express 2、此时出现“连接到服务器”的对话框, “服务器名称”设置为SQL数据库所在机器的IP地址 “身份验证”设置为SQL Server身份验证或者Windows 身份验证 填写登录名和密码后,点击“连接”按钮,即可进入到SQL数据库操作界面。 二:新建数据库 登录进去后,右击“数据库”,选择—“新建数据库” 设置数据库名称,在下面的选项卡中还可以设置数据库的初始大小,自动增长,路径。 点击确定,一个数据库就建好了。 三:如何备份的数据库文件。 登录进入后,右击相应的需要备份数据库----选择“任务” 目标下的备份到,点击“添加”按钮可以设置备份数据库保存的路径。 四:如何还原备份的数据库文件。(以本地机器为例子) 1、设置服务器名称,点击右边的下拉框的三角,选择“浏览更多…”。 此时出现查找服务器对话框,选择“本地服务器”---点开“数据库引擎”前面 的三角---选中出现的服务器名称—确定。 (注:可以在“网络服务器”选项卡中设置网络服务器) 2、设置身份验证,选择为“windows身份验证” 3、点击连接按钮,进入数据库管理页面 4、右击“数据库”,选择“还原数据库”,出现还原数据库的对话框 还原的目标----目标数据库,这里设置数据库的名字 还原的源----选择“源设备”,在弹出的对话框中点击“添加”按钮,找到所备 份的数据库文件,确定。 5、此时,在还原数据库对话框中会出现所还原的数据库的信息。在前面选中所需还 原的数据库。确定。 6、为刚刚还原的数据库设置相应的用户。 a点开“安全性”---右击“登录名”---新建登录名 b 设置登录名(假如为admin),并设置为SQL Server身份验证,输入密码,去除 “强制实施密码策略”前的勾。 C 找到导入的数据库,右击此数据库----选择“属性”,在选择页中,点击“文件” 设置所有者,点击右边的按钮,选择“浏览”,找到相应的用户(如admin)。确 定。。 7、此时重新以admin的身份进入,就可操作相应的数据库。
动态语句基本语法 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesqlN'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fnamevarchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fnamevarchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @numint, @sqlsnvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @numint, @sqlsnvarchar(4000) set @sqls='select @a=count(*) from tableName ' execsp_executesql @sqls,N'@aint output',@num output select @num 1 :普通SQL语句可以用Exec执行例: Select * from tableName Exec('select * from tableName')
SQLSERVER数据库、表的创建及SQL语句命令 SQLSERVER数据库,安装、备份、还原等问题: 一、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了 2、sql server服务启动失败,解决方法: 进入sql server configure manager,点开Sql server 网络配置(非sql native client 配置),点sqlzhh(我sqlserver 的名字)协议,将VIA协议禁用。再启动Sql Server服务,成功 如图: 二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。 解决方法:
1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。 三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。 解决方法: 选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。
四、查看数据库版本的命令:select @@version 在数据库中,点击“新建查询”,然后输入命令,执行结果如下 五、数据库定义及操作命令: 按照数据结构来组织、存储和管理数据的仓库。由表、关系以及操作对象组成,把数据存放在数据表中。 1、修改数据库密码的命令: EXEC sp_password NULL, '你的新密码', 'sa' sp_password Null,'sa','sa'
Sql Server 常用函数 1,统计函数avg, count, max, min, sum 2, 3,多数聚会不统计值为null的行。可以与distinct一起使用去掉重复的行。可以与group by 来分组4, 5, 2,数学函数 6, 7, SQRT 8, ceiling(n) 返回大于或者等于n的最小整数 9, floor(n), 返回小于或者是等于n的最大整数 10,round(m,n), 四舍五入,n是保留小数的位数 11,abs(n) 12,sign(n), 当n>0, 返回1,n=0,返回0,n<0, 返回-1 13,PI(), 3.1415.... 14,rand(),rand(n), 返回0-1之间的一个随机数 15,3,字符串函数 16, 17,ascii(), 将字符转换为ASCII码, ASCII('abc') = 97 18,char(), ASCII 码转换为字符 19,low(),upper() 20,str(a,b,c)转换数字为字符串。a,是要转换的字符串。b是转换以后的长度,c是小数位数。 str(123.456,8,2) = 123.46 21,ltrim(), rtrim() 去空格 22,left(n), right(n), substring(str, start,length) 截取字符串 23,charindex(子串,母串),查找是否包含。返回第一次出现的位置,没有返回0 24,patindex('%pattern%', expression) 功能同上,可是使用通配符 25,replicate('char', rep_time), 重复字符串 26,reverse(char),颠倒字符串 27,replace(str, strold, strnew) 替换字符串 28,space(n), 产生n个空行 29,stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是开始位置,3是要从原来串中删除的字符长度,ijlmn是要插入的字符串。 30,3,类型转换函数: 31, 32,cast, cast( expression as data_type), Example: 33,SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' 34,convert(data_type, expression) 35,4,日期函数 36, 37,day(), month(), year() 38,dateadd(datepart, number, date), datapart指定对那一部分加,number知道加多少,date指定在谁的基础上加。datepart的取值包括,
SQL SERVER函数大全 SQL SERVER命令大全 SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16
SQLServer语句优化 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。 需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。 下面的表总结了何时使用聚集索引或非聚集索引(很重要): 动作描述使用聚集索引使用非聚集索引 列经常被分组排序应应 返回某范围内的数据应不应 一个或极少不同值不应不应 小数目的不同值应不应 大数目的不同值不应应 频繁更新的列不应应 外键列应应 主键列应应 频繁修改索引列不应应 事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。 结合实际,谈索引使用的误区 理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。 1、主键就是聚集索引 这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。 显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。 从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会
在SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示。在下列的CONVERT()函数例子中,数据类型的length和style参数是可选的: CONVERT (data-type [(length)], expression[,style]) 可将它简化为如下形式,因为现在不讨论如何使用数据类型: CONVERT(date_type, expression[,style]) 根据上面的定义,CONVERT()函数可接受2个或3个参数。因此,下列两个例子都是正确的: SELECT CONVERT(Varchar(20),GETDATE()) SELECT CONVERT(Varchar(20),GETDATE(), 101) 这个函数的第一个参数是数据类型Varchar(20),第2个参数是另一个函数GETDATE()。GETDATE()函数用datetime数据类型将返回当前的系统日期和时间。第2条语句中的第3个参数决定了日期的样式。这个例子中的101指以mm/dd/yyyy格式返回日期。本章后面将详细介绍GETDATE()函数。即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE()函数。注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。 确定性函数 由于数据库引擎的内部工作机制,SQL Server必须根据所谓的确定性,将函数分成两个不同的组。这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。例如,GETDATE()函数是非确定性函数,因为它不会两次返回相同的值。为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。部分原因是SQL Server缓存与预编译可执行对象的方式。例如,即席查询可以使用任何函数,不过如果打算构建先进的、可重用的编程对象,理解这种区别很重要。 以下这些函数是确定性的: ●?AVG()(所有的聚合函数都是确定性的) ●?CAST() ●?CONVERT() ●?DATEADD() ●?DATEDIFF() ●?ASCII() ●?CHAR() ●?SUBSTRING() 以下这些函数与变量是非确定性的: ●?GETDATE()
易语言操作SQL Server 数据库全过程 最近看到很多初学者在问在易语言中如何操作SQL Serve以外部数据库,也有人提出想要个全面的操作过程,为了让大家能够尽快上手,我给大家简单介绍一下操作SQL的过程,希望能起到抛砖引玉的作用。 由于我本身工作业比较忙,就以我目前做的一个软件的部份内容列给大家简单讲讲吧,高手就不要笑话了,只是针对初学者 第步,首先需要建立一个数据库: 以建立一个员工表为例,各字段如下 3 员工ID int 4 0 0 登陆帐号nvarchar 30 1 0 密码nvarchar 15 1 0 所属部门nvarchar 30 1 0 姓名nvarchar 10 1 0 性别nvarchar 2 1 0 年龄nvarchar 10 1 0 当前职务nvarchar 10 1 0 级别nvarchar 10 1 0 出生日期nvarchar 40 1 0 专业nvarchar 10 1 0 学历nvarchar 8 1 0 婚姻状况nvarchar 4 1 0 身份证号nvarchar 17 1 0 籍贯nvarchar 50 1 0 毕业院校nvarchar 50 1 0 兴趣爱好nvarchar 600 1 0 电话nvarchar 11 1 0 家庭成员nvarchar 20 1 0 工作经历nvarchar 600 1 0 销售行业经验nvarchar 600 1 0 离职原因nvarchar 600 1 0 升迁记录nvarchar 600 1 0 调岗记录 打+ -rd nvarchar 600 1 0 特殊贡献nvarchar 600 1 0 奖励记录nvarchar 600 1 0 处罚记录nvarchar 600 1 0 同事关系nvarchar 4 1 0 企业忠诚度nvarchar 4 1 0 入司日期nvarchar 30 1 0 在职状态nvarchar 4 1 0 上级评语nvarchar 600 1 0 最后登陆时间nvarchar 20 1 0 登陆次数nvarchar 50 1 0 照片image 16 1 一般我习惯用nvarchar,因为这是可变长的的非Unicode数据,最大长度为8000个字符,您可以根
SqlServer教程:经典SQL语句集锦 SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句:1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表:A: create table tab_new like tab_old (使用旧表创建新表) B: create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。7、说明:添加主键: [html]view plaincopyprint? 1. Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:
序号功能语句 1创建数据库(创建之前判断该数据库是否存在)if exists (select * from sysdatabases where name='databaseName') drop database databaseName go Create DATABASE databasename 2删除数据库drop database databasename 3备份数据库USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' BACKUP DATABASE pubs TO testBack 4创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 5根据已有表创建新表1、use 原数据库名 go select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)2、create table tab_new as select col1,col2… from tab_old definition only 6创建序列create sequence SIMON_SEQUENCE minvalue 1 -- 最小值 maxvalue 999999999999999999999999999 -- 最大值start with 1 -- 开始值 increment by 1 -- 每次加几 cache 20; 7删除新表drop table tabname 8增加一个列Alter table tabname add colname coltype alter table tablename add column_b int identity(1,1) 9删除一个列Alter table tabname drop column colname 10修改一个列ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(30) NOT NULL DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 11添加主键Alter table tabname add primary key(col) 12删除主键Alter table tabname drop primary key(col) 13创建索引create [unique] index idxname on tabname(col…。)14删除索引drop index idxname on tabname 15创建视图create view viewname as select statement 16删除视图drop view viewname 17选择数据记录sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select top 10 * from 数据表 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in ('值1','值2','值3')" sql="select * from 数据表 where 字段名 between 值1 and 值2" 注:like中"%"匹配0个或多个字符;like中"_"匹配一个字符 18更新数据记录sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 ……字段n=值n where 条件表达式" 19删除数据记录sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) 20添加数据记录sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)" sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) 21数据记录统计函数AVG(字段名) 得出一个表格栏平均值 COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"set rs=conn.excute(sql) 用 rs("别名") 获取统计的值,其它函数运用同上。 22查询去除重复值select distinct * from table1 23查询数据库中含有同一这字段的表select name from sysobjects where xtype = 'u' and id in(select id from syscolumns where name = 's3') 24只复制表结构select * into a from b where 1<>1 select top 0 * into b from a 25复制内容set identity_insert aa ON insert into aa(Customer_ID, ID_Type, ID_Number) select Customer_ID, ID_Type, ID_Number from TCustomer; set identity_insert aa OFF 26UNION 运算符(使用运算词的几个查询结果行必须是一致的)UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1 就是来自TABLE2。 27EXCEPT 运算符EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。 SQL Server语句 1/3
查询,统计股票主要财务数据,查询Oracle正在执行的SQL语句,查询python模块的帮助文档,查询SQLServer正在执行的语句 查找/etc/passwd下bash为/bin/bash用户的数,查找两个有序数组中的中位数,查找数组中最大值最小值的另一种思路 [代码] [C/C++]代码 #include