我有一个存储过程,他的作用是检测某张表中的某个列是否有某个值(有该值则COUNT(*)大于0,否则COUNT(*)等于0)如下ALTER PROCEDURE dbo.P_Common_FieldExists
(
@TableName VARCHAR(20), --表名
@FieldName VARCHAR(20), --列名
@Field VARCHAR(20) --要检测的数据
)
AS
DECLARE @Sql VARCHAR(150)
SET @Sql='SELECT COUNT(*) FROM '+@TableName+' WHERE '+@FieldName+ '=' +@Field
EXEC (@Sql)
RETURN
但是如果按照上面的写法就有可能被注入攻击,请问要如何修改
(
@TableName VARCHAR(20), --表名
@FieldName VARCHAR(20), --列名
@Field VARCHAR(20) --要检测的数据
)
AS
DECLARE @Sql VARCHAR(150)
SET @Sql='SELECT COUNT(*) FROM '+@TableName+' WHERE '+@FieldName+ '=' +@Field
EXEC (@Sql)
RETURN
但是如果按照上面的写法就有可能被注入攻击,请问要如何修改
解决方案 »
- 如何删除一个数据库定时备份?
- 我用vb.net连接数据库用localhost找不到网络路径,只能用计算机名才能连接成功.(解决立即给分)
- 【简单问题】数据库字段去空格,马上结贴
- 求SQL 2000怎么打开2005的数据库文件
- 【【【【【【 存储过程结构问题 libin_ftsafe(子陌红尘)等高人请进 谢谢】】】】】】
- 一个sql语句问题——关于用count的默认值问题
- 禁用外键的问题
- 麻烦看看如何建个视图,过滤重复的取最大ID号的
- 只做select时数据类型转换正常,但将此语句查询出来的内容直接放到临时表中就说转换出错
- 怎样得到库中所有底 约束、索引、主键。。。及其内容?
- 求助!!!!!!!!!!!!!!!
- sql server 2008 安装不了,“活动模板库ATL出错"
比如:
string tablename=tablename.replace("'","''");类似这样。
--那就只有尽量少改动咯。
alter PROCEDURE dbo.P_Common_FieldExists
(
@TableName VARCHAR(20), --表名
@FieldName VARCHAR(20), --列名
@Field VARCHAR(20) --要检测的数据
)
AS
set @tablename=replace(@tablename,'''','''''')
set @FieldName=replace(@FieldName,'''','''''')
set @Field=replace(@Field,'''','''''')
DECLARE @Sql VARCHAR(150)
SET @Sql='SELECT COUNT(*) FROM '+@TableName+' WHERE '+@FieldName+ '=' +@Field
print @sql
EXEC (@Sql)
RETURN
比如@Field我传的值是' 1;DROP DATABASE XXXX'