首页 新闻 会员 周边 捐助

SQL 事务有长度限制吗?

0
悬赏园豆:5 [已解决问题] 解决于 2012-06-28 17:23

要批量执行SQL

SQL语句如下

针对学生 ,每个学生有三个SQL,都是插入的语句

第一个的语句字段有40个字段。

批量执行超过20个学生的时候,就执行失败。

即执行 SQL语句的数量》》 20* 3=60个

 30个学生的时候,总的语句为90个,SQL语句的总体文本,大小超过25KB

错误提示信息为:【将截断字符串或二进制数据。语句已终止。】。

大牛们,求解释
 

二十三号同学的主页 二十三号同学 | 小虾三级 | 园豆:974
提问于:2012-06-28 15:17
< >
分享
最佳答案
0

事务没限制,你这个错误是你要插入的数据内容与数据库里字段的数据内容不兼容(超出了数据长度)。

收获园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-06-28 15:40

在执行 10个以下的插入语句是可以的。 也就是 10*3=30个SQL语句的时候。

应该不会是 赋值超过了字段的对应长度吧

二十三号同学 | 园豆:974 (小虾三级) | 2012-06-28 16:02

@二十三号同学: 你是把SQL写入到一个字符串,然后再执行?

无之无 | 园豆:5095 (大侠五级) | 2012-06-28 16:11

@笨笨蜗牛: 对。

二十三号同学 | 园豆:974 (小虾三级) | 2012-06-28 16:25

@二十三号同学: 

那就是你的SQL语句组合成的字符串超出了这个字符串定义的长度了。

你可以这样(伪代码):

1、启动事务

2、使用EXECUTE逐条执行insert操作

3、关闭事务

无之无 | 园豆:5095 (大侠五级) | 2012-06-28 16:26

 我从网上Down的批量SQL,这样是不对的???
        if (con.State == ConnectionState.Closed)
            con.Open();
        string mingling = "";
        SqlTransaction tran = con.BeginTransaction();
        SqlCommand command = new SqlCommand();
        command.Transaction = tran;
        command.Connection = con;
        command.CommandType = CommandType.Text;
        try
        {
            for (int i = 0; i < sql.Length; i++)
            {
                if (sql[i].Trim() != "")
                {
                    mingling += "\r\n" + sql[i];
                    command.CommandText = sql[i];
                    command.ExecuteNonQuery();
                }
            }
            tran.Commit();
            return true;
        }
        catch (Exception ex)
        {
            tran.Rollback();
             WriteToLog(mingling + "\r\n" + ex.Message);
            //ShowErr(ex.Message);
            return false;
        }

二十三号同学 | 园豆:974 (小虾三级) | 2012-06-28 16:30

@二十三号同学: 

语句没问题。

你看下,报告错误的那条SQL语句。

问题应该是指定语句中有数据内容的长度超出了字段定义的长度。

无之无 | 园豆:5095 (大侠五级) | 2012-06-28 16:39

@笨笨蜗牛: 终于解决啦!!确实是某个字段的值,超过了长度了。

nvarchar(32) 原来只能放16个汉字哇。。。

额。。悲催

感谢蜗牛!!!

二十三号同学 | 园豆:974 (小虾三级) | 2012-06-28 17:23

@二十三号同学: 

nvarchar(32)是能放32的,怎么只能放16个?varchar(32)就是16个。

无之无 | 园豆:5095 (大侠五级) | 2012-06-28 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册