ms2000与ms2005的bit类型

zyf32145 2010-10-25 12:26:59
我用snc 2005连mssql2000
由于2005的BIT类型值为true, false, 2000的值1, 0
我用数据窗口retrieve后, 所有bit类型的值, 全部返回-1了
有没有办法在连接的时候, 指定SQL返回BIT类型列的实际值为0和1或其它办法解决这个问题?
...全文
126 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL2088 2010-10-25
  • 打赏
  • 举报
回复
-1 是如何返回的
SQL2088 2010-10-25
  • 打赏
  • 举报
回复
declare @s bit,@s1 bit 

set @s=1
set @s1='true'

if @s='true'
print '1和true'

if @s1=1
print 'true就是1'


zyf32145 2010-10-25
  • 打赏
  • 举报
回复
全部修改成tinyint了, 真要命啊!!


非常感谢老大们, 结贴了
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 billpu 的回复:]
引用 13 楼 zyf32145 的回复:

有没有人知道用OLEDB连接时, 我指定了identity获取方式为IDENT_CURRENT, 但是PB11.5返回的还是@@identity, 如果用oledb可以解决指定identity返回方式的问题, 我也就不需要用snc2005去连2000了

DBParm="PROVIDER='SQLOLEDB',PROVIDERSTRING='d……
[/Quote]

应该是数据的特性, 使用oledb指定DBParm="PROVIDER中identity=IDENT_CURRENT
在JAVA或.NET中,应该也是可以的.
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 guguda2008 的回复:]
可以的话,批量把bit改成tinyint如何
[/Quote]

现在正在这样子做, 比较痛苦
billpu 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zyf32145 的回复:]

有没有人知道用OLEDB连接时, 我指定了identity获取方式为IDENT_CURRENT, 但是PB11.5返回的还是@@identity, 如果用oledb可以解决指定identity返回方式的问题, 我也就不需要用snc2005去连2000了

DBParm="PROVIDER='SQLOLEDB',PROVIDERSTRING='database=cbs_test',DATASO……
[/Quote]
这种写法蛮新颖的,还能在provider的connertion上提供identity的定义呀,是pb的特性吗?还是ado.net的特性?
不太清楚
以下是我猜测的
如果在连接层面用IDENT_CURRENT,应该作用域是连接吧,所以你的结果和@@identity完全一样,当然scope_identity也一样

可以去pb论坛看看
guguda2008 2010-10-25
  • 打赏
  • 举报
回复
可以的话,批量把bit改成tinyint如何
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 abuying 的回复:]
SQL code
IDENT_CURRENT可加上表名吧

IDENT_CURRENT('table_name')
参数
table_name
是将要返回其标识值的表的名称
[/Quote]


在dbparm里面只需要指定IDENT_CURRENT就可以了.
环境在更新特定表的时候, 会自动加表名.
其实这个功能我在10.5的时候是OK的, 最近因为一些问题升级到了11.5,
结果dbparm里面设置identity后,PB环境读不到, 还是按@@IDENTITY返回.
所以改用snc 2005连2000.
abuying 2010-10-25
  • 打赏
  • 举报
回复
IDENT_CURRENT可加上表名吧

IDENT_CURRENT('table_name')
参数
table_name
是将要返回其标识值的表的名称

zyf32145 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sql2088 的回复:]
scope_identity
[/Quote]

scope_identity和IDENT_CURRENT都试过, 还是返回@@identity的方式

这个问题真是伤脑筋啊, 非常感谢各位老大的关注

再等等看, 有没有人知道的.

刚刚看了下ProviderString参数, 也没有这方面功能~~
SQL2088 2010-10-25
  • 打赏
  • 举报
回复
scope_identity
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
有没有人知道用OLEDB连接时, 我指定了identity获取方式为IDENT_CURRENT, 但是PB11.5返回的还是@@identity, 如果用oledb可以解决指定identity返回方式的问题, 我也就不需要用snc2005去连2000了

DBParm="PROVIDER='SQLOLEDB',PROVIDERSTRING='database=cbs_test',DATASOURCE='LSSERVER',Identity='IDENT_CURRENT()'"
「已注销」 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyf32145 的回复:]

系统里面蛮多地方用到BIT的, 关键是一个找起来不好办啊.

如果在连接参数中能够设置, 直接返回BIT的实际就好了
[/Quote]
总会有办法的,别着急。
dawugui 2010-10-25
  • 打赏
  • 举报
回复
这个?我建议你最好加个判断进行转换吧.用case when 即可.
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 billpu 的回复:]
我一直搞不清楚 微软为什么要bit引入true和false的概念到2005中
2000中bit概念很清晰 一个位,0 和 1 而已,又省空间
2005中为什么要引入true和false的概念,数据占用空间也增加了
好吧 从低版本到高版本没问题,从高版本到低版本又带来了很多问题
以后还是不要用bit了,直接tinyint吧

你这个-1的概念就是程序不认
[/Quote]

我现在是非常后悔当初用了这该死的BIT, 真想回到当初写下TINYINT啊
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
系统里面蛮多地方用到BIT的, 关键是一个找起来不好办啊.

如果在连接参数中能够设置, 直接返回BIT的实际就好了
billpu 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zsh0809 的回复:]

引用 3 楼 billpu 的回复:

我一直搞不清楚 微软为什么要bit引入true和false的概念到2005中
2000中bit概念很清晰 一个位,0 和 1 而已,又省空间
2005中为什么要引入true和false的概念,数据占用空间也增加了
好吧 从低版本到高版本没问题,从高版本到低版本又带来了很多问题
以后还是不要用bit了,直接tinyint吧

你这个-1的概念……
[/Quote]
呵呵 以前从access到sqlserver 2000 已经搞过一次这种问题了
没想到2000到2005又有类似的问题了 也不知道这个算进步还是退步
shizheyangde 2010-10-25
  • 打赏
  • 举报
回复
case处理吧
zyf32145 2010-10-25
  • 打赏
  • 举报
回复
是的, -1是程序环境自动返回的,开发工具是PB11.5


我猜的也和BILLPU一样, 是PB环境不认这个值.

之前查资料有看到说true, false是MSSQL2005的显示值, 实际存储值还是0和1
「已注销」 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 billpu 的回复:]

我一直搞不清楚 微软为什么要bit引入true和false的概念到2005中
2000中bit概念很清晰 一个位,0 和 1 而已,又省空间
2005中为什么要引入true和false的概念,数据占用空间也增加了
好吧 从低版本到高版本没问题,从高版本到低版本又带来了很多问题
以后还是不要用bit了,直接tinyint吧

你这个-1的概念就是程序不认
[/Quote]
小猪急了

加载更多回复(2)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧