易截截图软件、单文件、免安装、纯绿色、仅160KB

拼接SQL造成的意想不到的后果

执行数据操作时,由于拼接SQL存在种种弊端,早就应该抛弃了,但在现实开发时,又由于种种原因,公司一直采用这种方式(UI层和逻辑层都有严格的过滤,倒也没出现过什么问题),但昨天开发时却出现了意想不到的问题,一个简单的语句会造成严重后果。简单的语句示例如下:
    /// <summary>
    /// 更新主键为2的记录的总钱数
    /// </summary>
    /// <param name="totalMoney">修改后的总钱数</param>
    public void UpdateTotalMoney(int totalMoney)
     {
        int id = 2; //数据库表主键
        int oldTotalMoney = 5000;       //主键为2的记录原来的总钱数
        int newTotalMoney = totalMoney; //主键为2的记录更改后的钱数
        int totalMoneyChange = oldTotalMoney - newTotalMoney; //总钱数的变化量
        string sql = string.Format("update Test1220 set totalMoney = {0},remainMoney = remainMoney-{1} where id = {2}", newTotalMoney, totalMoneyChange, id);   //总钱数变化,剩余可支配钱数也跟着编号
         SqlConnection con = new SqlConnection(sqlConnectString);
         con.Open();
         SqlCommand cmd = new SqlCommand(sql, con);
         cmd.ExecuteNonQuery();
         con.Close();
     }
    CREATE TABLE Test1220(
         id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
         totalMoney int NULL,
         remainMoney int NULL
&n


相关文档:

SQL里的EXISTS与in、not exists与not in

SQL里的EXISTS与in、not exists与not in
系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists
修改方法如下:
in的SQL语句
SELECT id, category_id, htmlfile, title, convert(varchar(20),begintime,112) as pubtime
from tab_oa_pub WHERE ......

精妙SQL语句整理

一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack ......

SQL Server 2005 中 ROW_NUMBER() 函数的简单用法

表名:d_ClientInfo
语句作用:取出第100-120条数据
 SELECT *
from (SELECT ROW_NUMBER() OVER (ORDER BY ClientID ASC) AS ROWID, * from d_ClientInfo) AS tmpTable
WHERE ROWID BETWEEN 100 AND 120
此函数会为数据表重新编号并新建数据列ROWID,不需要的屏蔽掉就OK了。 ......

SQL跨服务器查询

--在查询分析器中,在Server服务器中创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','服务器名'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
Go
--使用
select * from srv_lnk.数据库名.dbo.表名
--断开
exec sp_dropserver 'srv_lnk','droplogins' ......

SQL Server 可更新订阅事务复制的trigger处理

1. 消除trigger的嵌套调用。最好不要用 EXEC sp_configure 'nested triggers', '0', 应该在trigger中使用判断语句, 例如:if not update (name) return。
2. 使用 not for replication 禁止在复制的时候触发trigger。
3. 创建publisher article的时候, 设置 copy user triggers为 true。
这样保证:trigger不会嵌套调 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号