一个四用户信息同步更新的存储过程

 更新时间:2016年11月25日 16:42  点击:1637
不实用,之所以写,一为领导的要求,另外也熟悉下写代码,代码多写点也没什么坏处,并且写了之后发现临时表还挺容易用的,数据量小的时候,并显不出临时表速度不行的问题.
代码如下:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*
Name:游戏中四人数据同时更新
Designed By :whbo
Designed At :2005-10-12
Modified By :
Modified At :
Memo:
*/
ALTER PROC [PrMoney_UpdateCash2]
@chvModeName varchar(16),
@chvSourceName varchar(64),
@chvRemark varchar(128),
@intUserID1 int,
@intUserID2 int,
@intUserID3 int,
@intUserID4 int,
@intWantedAmount1 int,
@intWantedAmount2 int,
@intWantedAmount3 int,
@intWantedAmount4 int,
@chvIPAddress1 varchar(15),
@chvIPAddress2 varchar(15),
@chvIPAddress3 varchar(15),
@chvIPAddress4 varchar(15),
@inyLog tinyint
as
set nocount on
set xact_abort on
Declare @intCashAmount1 int,@intCashAmount2 int,@intCashAmount3 int,@intCashAmount4 int
Declare @FRate float,@FTemp float
Declare @bNeedReCalc bit --0:不用重算 ;1:需要重算
set @FRate=1.0
set @FTemp=1.0
set @bNeedReCalc=0
Declare @FTemp1 float,@FTemp2 float,@FTemp3 float,@FTemp4 float
--这里要注意,更新用户现金取数据库中的数据,跟游戏服务器能否保持一致
--取得用户现金
select @intCashAmount1=[Amount] from [dbo].[Money] where [UserID]=@intUserID1
select @intCashAmount2=[Amount] from [dbo].[Money] where [UserID]=@intUserID2
select @intCashAmount3=[Amount] from [dbo].[Money] where [UserID]=@intUserID3
select @intCashAmount4=[Amount] from [dbo].[Money] where [UserID]=@intUserID4
Create Table #Temp1(TTemp float)
if @intCashAmount1 @intWantedAmount1<0
begin
set @FTemp=-@intCashAmount1/@intWantedAmount1
insert into #temp1 values(@FTemp)
end
if @intCashAmount2 @intWantedAmount2<0
begin
set @FTemp=-@intCashAmount2/@intWantedAmount2
insert into #temp1 values(@FTemp)
1. 查看数据库的版本
select @@version

2. 查看数据库所在机器操作系统参数
exec master..xp_msver

3. 查看数据库启动的参数
sp_configure

4. 查看数据库启动时间
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1

查看数据库服务器名和实例名
print 'Server Name...............: ' convert(varchar(30),@@SERVERNAME)
print 'Instance..................: ' convert(varchar(30),@@SERVICENAME)
5. 查看所有数据库名称及大小
sp_helpdb

重命名数据库用的SQL
sp_renamedb 'old_dbname', 'new_dbname'

6. 查看所有数据库用户登录信息
sp_helplogins

查看所有数据库用户所属的角色信息
sp_helpsrvrolemember

修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程

更改某个数据对象的用户属主
sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'

注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
 

把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本

7. 查看链接服务器
sp_helplinkedsrvlogin

查看远端数据库用户登录信息
sp_helpremotelogin

8.查看某数据库下某个数据对象的大小
sp_spaceused @objname

还可以用sp_toptables过程看最大的N(默认为50)个表

查看某数据库下某个数据对象的索引信息
sp_helpindex @objname

还可以用SP_NChelpindex过程查看更详细的索引情况
SP_NChelpindex @objname

clustered索引是把记录按物理顺序排列的,索引占的空间比较少。
 
对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。
 
查看某数据库下某个数据对象的的约束信息
sp_helpconstraint @objname

9.查看数据库里所有的存储过程和函数
use @database_name
前提需要工具:SQL Query Analyzer和SqlExec Sunx Version
  
  第一部分:
  
  有关去掉xp_cmdshell来保护系统的分析总结:
  首先知道一下语句:
  1.去掉xp_cmdshell扩展过程的方法是使用如下语句:
  if exists (select * from dbo.sysobjects where id=object_id(N'[dbo].[xpcmdshell]') and OBJECTPROPERTY(id,N'IsExtendedProc')=1)exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
  2.添加xp_cmdshell扩展过程的方法是使用如下语句:
  sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
  现在看看现象:
  我们在取得SA权限后远程用Sqlexec执行cmd命令,出现提示SQL_ERROR,那么很可能是去掉了xp_cmdshell。
  
  现在来看看被去掉xp_cmdshell后恢复的两种方法:
  
  方法一、使用SQL Query Analyzer连接对方后直接写入,挺方便sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'方法二、使用SqlExec Sunx Version首先在SqlExec Sunx Version的Format选项里填上%s,在CMD选项里输入sp_addextendedproc 'xp_cmdshell','xpsql70.dll'或者对Sql2000情况下使用sp_addextendedproc 'xp_cmdshell','xplog70.dll'另外使用SqlExec Sunx Version来去除xp_cmdshell的方法和加的时候选择条件一样,然后输入sp_dropextendedproc 'xp_cmdshell'就可以了
  
  第二部分:
  
  假如对方已经把xplog70.dll删除或者改了名,我们来用下面的方法继续我们的hack任务:
  
  当出现如下现象暗示代表很有可能是xplog70.dll删除或者改了名。
  
  在查询分析器中写入sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'提示数据库中已存在名为'xp_cmdshell'的对象。
MySQL中SELECT语句的基本语法是:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT|DISTINCTROW|ALL] select_list [INTO {OUTFILE|DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...] [LIMIT [offset,] rows] [PROCEDURE procedure_name]]
从这个基本语法可以看出,最简单的SELECT语句是SELECT select_list,实际上利用这个最简单的SELECT语句,你也可以完成许多你期待的功能,首先你能利用它进行MySQL所支持的任何运算,例如:SELECT 1 1,它将返回2;其次,你也能利用它给变量赋值,而在PHP中,运用SELECT语句的这种功能,你就可以自由地运用MySQL的函数为PHP程序进行各种运算,并赋值给变量。在很多的时候,你会发现MySQL拥有许多比PHP更为功能强大的函数。
STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL对ANSI SQL92的扩展。如果优化器以非最佳次序联结表,使用STRAIGHT_JOIN可以加快查询。
SQL_SMALL_RESULT和SQL_BIG_RESULT是一组相对的关键词。它们必须与GROUP BY、DISTINCT或DISTINCTROW一起使用。SQL_SMALL_RESULT告知优化器结果会很小,要求MySQL使用临时表存储最终的表而不是使用排序;反之,SQL_BIG_RESULT告知优化器结果会很小,要求MySQL使用排序而不是做临时表。
HIGH_PRIORITY将赋予SELECT比一个更新表的语句更高的优先级,使之可以进行一次优先的快速的查询。
以上四个关键词的使用方法的确比较晦涩。幸运的是,在绝大多数情况下,在MySQL中我们完全可以选择不使用这四个关键词。
DISTINCT、DISTINCTROW对查询返回的结果集提供了一个最基本但是很有用的过滤。那就是结果集中只含非重复行。在这里要注意的是,对关键词DISTINCT、DISTINCTROW来说,空值都是相等的,无论有多少NULL值,只选择一个。而ALL的用法就有画蛇添足之嫌了。它对结果集的产生没有任何影响。
INTO {OUTFILE|DUMPFILE} 'file_name' export_options,将结果集写入一个文件。文件在服务器主机上被创建,并且不能是已经存在的。语句中的export_options部分的语法与用在LOAD DATAINFILE语句中的FIELDS和LINES子句中的相同,我们将在MySQL进阶_LOAD DATA篇中详细讨论它。而OUTFILE与DUMPFILE的关键字的区别是:后前只写一行到文件,并没有任何列或行结束。

作者:思索 整理:南海
  下面,笔者还为各位网友准备了一套数据库大餐,这就是在
MS-SQL Server下的Client/Server结构编程示例:  
  MS-SQL SERVER是微软公司生产的中型关系数据库管理系统,它有如下的一些特点:
客户/服务器体系结构
图形化的用户界面,使系统的管理更加直观和简单。
丰富的编程接口,为用户进行应用程序设计提供了更大的选择余地。
与Windows NT操作系统的有机集成,多线程体系结构设计,提高了系统对用户并发访问的速度。
对Web技术的支持,使用户能够很容易的将数据库中的数据发布到网上。
价格上的优势。与其它一些大型数据库系统如Oracle、Sybase等相比,SQL Server的价格非常便宜。
  由于SQL Server数据库管理系统具有突出的有点,所以其用户越来越多。本文中陈述的是一些使用SQL Server的方法和体会(以SQL Server6.5为例)。
  
一、系统的安装
  SQL Server要求安装在Windows NT操作系统平台下,它可以和NT一起运行在Intel x86、Alpha AXP或者MIPS等不同体系结构的微处理器环境。系统的内存和硬盘空间最小要求是16MB和96MB。在安装时,启动光盘上i386目录下的setup.exe程序,根据安装程序的提示可以很容易的完成系统安装。
  安装过程中系统主要生成了SQL Enterprise Manager、SQL Web Assistant、ISQL_W、SQL Books Online等系统工具,其中SQL Enterprise Manager是最重要的一个工具,它可以实现对SQL Server数据库系统的全面操作和维护。
  系统安装完毕后,有以下方法可以启动SQL Server服务:
使用net start mssqlserver命令启动SQL Server服务。
系统自动启动。
使用系统管理工具SQL Enterprise Manager或SQL Service Manager启动服务。
使用Windows NT控制面板里的服务选项启动SQL Server服务。

二、数据库的建立
  从SQL Enterprise Manager的数据库管理窗口选择“新建”按钮,弹出新建数据库对话框(如下页图所示)。在这个对话框中输入新建数据库的名称,选择存储数据库及其日志所使用的设备,输入它们的空间大小(以MB为单位),再根据需要选择Create for Load复选框(该复选框说明是否从一个备份库中向新建的数据库加载数据),然后选择“OK”按钮即可创建一个新的数据库。
  另外,使用SQL语句也可以创建数据库:
CREATE DATABASE MyDataBase
[!--infotagslink--]

相关文章

  • 金额阿拉伯数字转换为中文的存储过程

    Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • PHP操作MSSQL存储过程修改用户密码

    存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • MySql存储过程之逻辑判断和条件控制

    具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
  • js检测用户输入密码强度

    一个用Javascript检测用户输入密码强度的效果代码,以下代码主要是从以下四个方面检测用户输入的密码的强度的,有兴趣的朋友可以自己添加或修改成自己想要的形式! 1. 如果输入的密码位数少于5位,那么就判定为弱。 2. 如果...2015-10-23
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • php ajax注册验证用户名是否存在代码

    这是注册程序是一款当用户输入完用户名是,就会自动去数据库中查询用户要注册的用户名是否己经被注册了,如果是返回提示否则提示可以注册。 conn.php文件 代...2016-11-25
  • PHP调用MySQL存储过程并返回值实现程序

    本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
  • 微信小程序用户授权最佳实践指南

    这篇文章主要给大家介绍了关于微信小程序用户授权最佳实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-08
  • C#调用存储过程详解(带返回值、参数输入输出等)

    这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值、参数输入输出等,需要的朋友可以参考下...2020-06-25
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • 简单php cookie用户登录实例

    cookie 的用途之一是存储用户在特定网站上的密码和 id。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量...2016-11-25
  • 超详细的php用户注册页面填写信息完整实例(附源码)

    注册页面是大多数网站必备的页面,所以很有必要对自己的注册页面做些精心的设计。下面三张图,第一张是注册的展示页面,第二张思维导图就一个简单的逻辑,第三张是通过firebug查看调用的JS文件。 一、给每个输入框写下说明在...2015-11-24
  • MySQL验证用户权限的方法

    知识归纳因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先...2015-11-08
  • sqlserver添加sa用户和密码的实现

    这篇文章主要介绍了sqlserver添加sa用户和密码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-07
  • 如何有效提高网站的用户回头率

    第一,网站的内容;请各位站长朋友不要一天到晚只想着出什么好的绝招来推广网站,却忽略了网站的内容;其实网站的内容是极为重要的,因为这是你的本,你的根!网站的内容只有不断...2017-07-06
  • mysql误删root用户恢复方法

    装完数据库清理一些默认账号的时候不小心把root删除了,flush privileges 之后的新 root 忘了grant任何权限,查看mysqld选项里面有个 &#8722;&#8722;skip-grant-tables复制代码 代码如下: #/usr/libexec/mysqld --verbos...2015-03-15
  • Win2012服务器 远程桌面帐户允许多用户同时登录的配置方法

    这篇文章主要介绍了Win2012服务器 远程桌面帐户允许多用户同时登录的配置方法,需要的朋友可以参考下...2016-11-01