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

把SQL Server数据表的内容转换为相应的INSERT语句

笔者曾在《程序员》2009年11期上探讨Transact-SQL的元编程,即通过目录视图、元数据函数等方式访问数据库的元数据信息,在执行过程中动态生成SQL脚本。当时限于篇幅,所给的例子较少。这里给出动态生成SQL脚本的一个典型应用,把数据表的内容转换为相应的INSERT语句。
这个启发来自我管理远程数据库的经历。我常常需要用本地SQL Server数据库中的一个表的内容,去更新远程数据库中同名表中的内容。表中的内容只有数十行。网管屏蔽了数据库的1433端口,我只能使用远程桌面登录上去访问数据库。远程桌面支持剪贴板复制粘贴,也支持文件传输,剪贴板对于传输少量的文本数据很方便,文件传输要麻烦些且不太安全。我希望能把本机从表中查询出来的内容转换为INSERT语句,这样的话,就可以方便地复制到远程机器上执行。
由于生成的INSERT语句既取决于表的结构,也取决于表中的数据,生成这样的脚本是比较麻烦的。按照循序渐进的原则,我们先考虑简单的情况,假定数据表的结构是已知的。这里虚构了一个表,包含了几种代表性数据类型,但不含二进制数据。下面是表的定义脚本:
CREATE TABLE t1(
    c1 INT,
    c2 VARCHAR(10),
    c3 DATETIME
)
 
我们依次看各个列在INSERT语句中是怎么表示的。整数列不需要任何修饰,但由于动态生成的SQL语句是文本,列的值需用CAST或CONVERT函数转换为字符串。字符串列需要用单引号括起来。注意每个单引号在字符串中需用两个单引号表示。日期类型既需要转换,又得用单引号括起来,这里日期类型显示的格式并不重要。这样,生成的INSERT语句的脚本应该像下面这个样子:
SELECT 'INSERT INTO t1 SELECT '
+ CAST(c1 AS VARCHAR(100)) +','
+ ''''+c2+'''' +','
+ ''''+CAST(c3 AS VARCHAR(100))+''''
from t1
 
上面的脚本忽略了一个特殊但很常见的值,就是NULL。不管列本来的数据类型是什么,值为NULL时在INSERT语句中总是用字符串NULL表示,不加引号。我们可以用CASE函数处理值为NULL的情况。这样,上面的脚本改进为:
SELECT 'INSERT INTO t1 SELECT ' +
CASE
    WHEN c1 IS NULL THEN 'NULL'
    ELSE CAST(c1 AS VARCHAR(100))
END +',' +
CASE
    WHEN c2 IS NULL THEN 'NULL'
    ELSE ''''+c2+''''
END +',' +
CASE
    WHEN c3 IS NU


相关文档:

SQL*Plus中&字符处理

在SQL*Plus中默认的"&"表示替代变量,SQL*Plus认为&符后面的字符串为变量;只要在命令中出现该符号,SQL*Plus就会要你输入替代值。这就意味着你无法将一个含有该符号的字符串插入或更新到数据库
     
set define off 关闭替代变量功能,“&”将作为普通字符
set def ......

提高SQL效率的方案

--oracle优化slq语句
    (1)选择最有效率的表名顺序(只在基于规则的优化器中有效):
  Oracle的解析器按照从右到左的顺序处理from子句中的表名,from子句中写在最后的表(基础表 driving table)将被最先处理,在from子句中包含多个表的情况下,您必须选择记录条数最少的表作为基础表。假如有3个以上的 ......

asp.net连接sql用的SqlHelper

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Data.SqlClient;
namespace DAL
{
    /// <summary>
    /// 数据库的通用访问代码
    /// 此类为抽象类,不允许实例化,在应用 ......

oracle SQL分类

ORACLE 中SQL 语句大致可以分为4大类
1.DQL(data quary language 数据查询语言)
数据查询语言DQL基本结构是由SELECT子句,from子句,WHERE子句组成
2.DDL(data definition language 数据定义语言)
CREATE
ALTER
DROP
RENAME
TRUNCATE
3.DML(data manipulation language 数据操纵语言)
INSERT
UPDATE ......

ASP.NET 中如何防范SQL注入式攻击

一、什么是SQL注入式攻击?
  所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表
单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻
击过程类如: ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号