今天一个朋友问到这个问题,其实很好解决:
declare @dbname varchar(50)
declare c_database cursor for
select name from master.dbo.sysdatabases where name like '%数据库名%'
open c_database
fetch next from c_database into @dbname
while @@fetch_status=0
begin
exec('use '+@dbname
+' insert into 表名(字段) values(''内容'')')
fetch next from c_database &nb ......
创建外键约束
CREATE TABLE order_sample
(
orderid int PRIMARY KEY,
cust_id int FOREIGN KEY REFERENCES cuts_sample(cust_id) ON DELETE NO CASCADE
)
ON DELETE--用于控制尝试删除外键相关联的主表指向行时采取的操作
-NO ACTION
删除外键相关联的主表指向行时,报错
-CASCADE
删除外键相关联的主表指向行时,连带删除外键的所有行
-SET NULL
删除外键相关联的主表指向行时,把外键列设为空
-SET DEFAULT
删除外键相关联的主表指向行时,把外键列设为默认值
删除外键约束
ALTER TABLE order_sample
DROP CONSTRAINT [FK__order_sam__cust___0425A276]
添加外键
ALTER TABLE order_sample
ADD CONSTRAINT [FK__order_sam__cust___0425A276] FOREIGN KEY(cust_id) REFERENCES cuts_sample(cust_id) ON DELETE SET NULL
ON UPADTE 于ON DELETE方法一样 ......
避免SQL注入的方法有两种:一是所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理(这种做法我在一些公司见过),不过这种做法有时候针对相同的几个表有不同条件的查询,SQL语句可能不同,这样就会编写大量的存储过程,所以有人提出了第二种方案:参数化SQL语句。例如我们在本篇中创建的表UserInfo中查找所有女性用户,那么通常情况下我们的SQL语句可能是这样:
select * from UserInfo where sex=0
在参数化SQL语句中我们将数值以参数化的形式提供,对于上面的查询,我们用参数化SQL语句表示为:
select * from UserInfo where sex=@sex
我们再对代码中对这个SQL语句中的参数进行赋值,假如我们要查找UserInfo表中所有年龄大于30岁的男性用户,这个参数化SQL语句可以这么写:
select * from UserInfo where sex=@sex and age>@age
下面是执行这个查询并且将查询结果集以DataTable的方式返回的代码:
C# code
//实例化Connection对象
SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=Tru ......
SQL Lite
SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.
It is a open source product and can be downloaded from http://www.sqlite.org/ . SQL Lite is best suited in Smart Client architecture, where we can locally store all our data in SQL Lite and then synchronize the local data with main database.
There is aslo a good Query analyzer clone at http://www.monkeyshinez.net/SQLiteQA/
An ADO.net Provider for SQLLite is available at http://sourceforge.net/projects/adodotnetsqlite/
SQL Lite下载(Precompiled Binaries For Windows):http://www.sqlite.org/sqlite-3_6_22.zip,
http://www.sqlite.org/download.html
......
SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现。由此可见SQL注入式攻击的危害是很大的,那么作为数据库管理员该如何来防治呢?下面这些建议或许对数据库管理员防治SQL注入式攻击有一定的帮助。
1.普通用户与系统管理员用户的权限要有严格的区分
如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。
2.强迫使用参数化语句
如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语 ......
看到别人在论坛的提问:
一个表的效率问题
今天碰到2张表
1张 有字段
表A有
jtbh(家庭编号) hzxm(户主姓名) hnbh(户内最大编号)
1000 张三 03
1001 赵六..........................
表B有
grbh(个人编号=家庭编号+2位户内编号) xm(姓名) gz(工资)
100001 张三 1000
100002 李四 1000
100003 王五 1000
2张表数据几十W。。。。现在由于之前维护不好,表A的最大编号没有更新,例如表B 1001这户人有4个编号,100101,100102 ,100103,100105这样,但是我表A户内最大编号可能只到了04,而实际上要到05,请问各位大侠如何更新有效率,我自己写了个效率太低了。。。。。
于是 ......