【技术讨论】SQL SERVER2005下自增长字段的问题。
- SQL code
CREATE TABLE Test(id int identity(1,1))
- Delphi(Pascal) code
with ADOQuery dobegin Close; SQL.Text = 'select * from Test'; Open; ShowMessage(Fields[0].ClassName); //输出 TAutoIncField Close; SQL.Text = 'select * from (select * From Test) as a'; Open; ShowMessage(Fields[0].ClassName); //这儿要注意: // SQL SERVER 2000下输出 TAutoIncField // SQL SERVER 2005下输出 TIntegerField!end;
步步陷阱,如果大家有哪些其他要注意的地方也可以写出来。
[解决办法]
没用过2005
这个贴子最好置顶,这样可以每个要都看到
[解决办法]
先做个记号
[解决办法]
select * from test是从表直接获取数据,select * from (select * from test) a则是从子查询中获取数据,两个取出来的数据类型不同,可以理解啊。
[解决办法]
delphi的问题吧
[解决办法]
这么多星星出来吓人啊
通过在D7和D10中试验得出一个参考结论:
在D7和D10中都提示为TAutoIncField。
条件:
SQL2005为在原来2000未卸载干净的情况下安装的,所以保留了2000的一些机制。不知道在纯2005下面是否会出现楼主所说的情况。
如果在纯2005环境下出现楼主所说的情况,我猜想,是否是因为2005改变了一些东西,而Delphi在调用的时候就无法获取这些被改变的信息,导致字段类型在楼主所说的情况下转换成接近的类型被显示出来。
呵呵,小生愚见,如有错误的地方,望各位星星不吝赐教!
[解决办法]
这个应该是字段属性连带的问题,个人认识对于这种情况下,sql2k的做法是有欠妥当的,这个自动编号只是相对test表,而不是别名为a的子查询。
其实从SQL2k SP4开始就有好些与之前所不同,相关的应该在MSSQL版当中可以查到。SP4之后有对部分查询进行了优化,从而使得与之前的版本有相当大的结果差,也正因为如此,即便是SP4有了相当的性能提升也仍然,还有很多人不愿意更新。因为有些已经使人形成了一种习惯,甚至可以说是一种便利。更新之后,不仅得不到这种便利,稍欠清楚一点就有可能写出的东西事与愿违。
[解决办法]
对于视图, SQL2000也能准确表现自增字段, SQL2005就不行.
用起来好不习惯.
[解决办法]
现在不习惯,以后习惯了就好了。
[解决办法]
MARK!
[解决办法]
占座,接分
[解决办法]
通过临时表后自增长字段就成普通的数字型字段了咯
[解决办法]
汗~还没有准备好用2005呢~
[解决办法]
guanzhu
xuexi
[解决办法]
你用的delphi 是什么版本?
[解决办法]
还是觉得2005的做法比较稳妥些