日期:2014-05-17  浏览次数:20687 次

SQL中用参数化方式添加新字段
本帖最后由 qiujialongjjj 于 2013-03-01 17:06:34 编辑
sql中添加一个字段代码是:
Alter table RDMS_ProductInfo add col1 varchar(50)



现在我想在程序中实现上述功能,代码如下:
  
//这样写不能实现该功能
//查看sql发现变成:Alter table RDMS_ProductInfo add 'col1' varchar(50)
StringBuilder strSql = new StringBuilder();
strSql.Append(" Alter table RDMS_ProductInfo add @col varchar(50)");
SqlParameter[] parameters = {
                    new SqlParameter("@col", SqlDbType.VarChar,50)};
            parameters[0].Value = rdpims.colEN;
            SQLHelper.RunSql(strSql.ToString(), parameters);



求sql高手怎么实现参数化添加表字段。






以下是CSDN广告

------解决方案--------------------
create  procedure aa 
@col_name varchar(255),@col_type varchar(255)
as
begin
declare @str varchar(1000)
set @str='Alter table RDMS_ProductInfo add  '+@col_name+'  '+@col_type
exec (@str)
end

------解决方案--------------------
DDL语句本身不支持参数化,你只能用字符串拼接的方法实现,而1楼给的存储过程,是变相的字符串拼接,只是把拼接过程放到了存储过程内部去了,最终还是执行的拼接的语句,想要SQL注入一样没问题。
------解决方案--------------------
引用:
本帖最后由 qiujialongjjj 于 2013-03-01 17:06:34 编辑
            sql中添加一个字段代码是:
SQL code?1Alter table RDMS_ProductInfo add col1 varchar(50)


现在我想在程序中实现上述功能,代码如下:
C# code?123456789   //这……


你不用参数化不行吗,非得参数化啊
StringBuilder strSql = new StringBuilder();
strSql.Append(" Alter table RDMS_ProductInfo add " + rdpims.colEN + " varchar(50)");
 SQLHelper.RunSql(strSql.ToString());



------解决方案--------------------
这样行吗?

StringBuilder strSql = new StringBuilder();
strSql.Append("exec('Alter table RDMS_ProductInfo add' + @col + 'varchar(50)')");
SqlParameter[] parameters = {
                    new SqlParameter("@col", SqlDbType.VarChar,50)};
            parameters[0].Value = rdpims.colEN;
            SQLHelper.RunSql(strSql.ToString(), parameters);
------解决方案--------------------
strSql.Append("exec('Alter table RDMS_ProductInfo add ' + @col + ' varchar(50)')");

引号两边有空格,你没搞错吧
要是还不行,你干脆把整个一句话作为参数得了

StringBuilder strSql = new StringBuilder();
strSql.Append("@col");
SqlParameter[] parameters = {