源码中存在的bug 返回

SqlSugar
6 89
该叫什么 vcup 发布于1周前
悬赏:5 飞吻

https://github.com/donet5/SqlSugar/blob/8e848ee1e4d7b0dbae3b0d442c5b8d245541b2d4/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs#L621


这里为什么要在Lenght为-1的情况下返回null,即从DataType中移除"(MAX)"

在我的机器上,当DataType为varchat,Lenght为-1时,生成列的sql为 "[colume_name] nvarchat NOT NULL ", 用SSMS会看到该列长度为1


我的解决方案是 if (DataType.Length == -1) DataType.Length = 4001;

热忱回答6

  • vcup vcup VIP0
    1周前

    解决方案DataType应该是DbColumnInfo

    0 回复
  • -1 驱动很多驱动认为是max这个没有错 ,这个没绝对规范 (SqlServer -1就是max)

    你可以直接用  columnDatetype="varchar(100)"  不设置长度

    0 回复
  • vcup vcup VIP0
    1周前

    @fate sta

    https://github.com/donet5/SqlSugar/blob/8e848ee1e4d7b0dbae3b0d442c5b8d245541b2d4/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs#L618

    var isMax = item.Length > 4000 || item.Length == -1;

    这个变量名就是 isMax,但长度为-1时最终生成的sql却不会设置长度为MAX

    可能我没说清楚,问题在这里,我认为应该直接把后面的dataSize设置成 "(MAX)" 而不是再用一个 ?: 表达式

    0 回复
  • @vcup:不用发底层代码,你讲具体用 你用法 

    0 回复
  • 什么代码用了有什么问题

    0 回复
  • -1没有生效是吧,大概清楚你说的,你先用int.max

    0 回复