是这样,在VB中我试着利用
sql = "insert into PRODUCT_IN values(@@Identity ,'" & _
txtProductInfo(2).Text & "','" & DTPickerDate.Value & "')"
ExeSQL (sql)错误描述:简单的说,是把 @@Identity 作为NULL了;
想把这条语句直接交给DBMS去处理,@@Identity在引号内,不知道这样为什么不可以被处理,或是有其他解决办法,还望不吝赐教,谢谢!
sql = "insert into PRODUCT_IN values(@@Identity ,'" & _
txtProductInfo(2).Text & "','" & DTPickerDate.Value & "')"
ExeSQL (sql)错误描述:简单的说,是把 @@Identity 作为NULL了;
想把这条语句直接交给DBMS去处理,@@Identity在引号内,不知道这样为什么不可以被处理,或是有其他解决办法,还望不吝赐教,谢谢!
下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
select @int = @@IDENTITYinsert into tb values(@int)
sql = "declare @pID as int select @pID=@@Identity insert into PRODUCT_IN values(@pID ...
还是有错误:
3条语句间是空格(按SQL Server),错误还是指示@pID为NULL;
我想知道VB大概是怎样把SQL语句交给DBMS去处理的,我直接把整个3句都包含在""内了,不知道这样可以处理么
如果要更改标识列的当前种子,可把种子值传过存储过程来更改。
直接添加行:
myConn.Execute ("insert into table1 values('sahu','wefs',88)")
如果id不是最后一列,则应:
myConn.Execute ("insert into table1 (product,inorout,member) values('sahu','wefs',88)")
设置可更改种子:
myconn.execute ("SET IDENTITY_INSERT table1 ON")
更改种子:
myConn.Execute ("insert into table1 values('sahu','wefs',88,1000)")
执行下列语句后:
myconn.execute (""SET IDENTITY_INSERT table1 OFF")
则利用新种子。
此时建立了一个连接.INSERT tb SELECT 'x'
SELECT @@IDENTITY
得到 5 (不一定是5,依具你表中现在的种子值可能有不同)
再重新执行 SELECT @@IDENTITY
继续得到 5
这时,不要关掉查询分析器.
点文件新建"查询窗口"
输入
SELECT @@IDENTITY
得到 NULL再切回你原来的窗口,
继续 SELECT @@IDENTITY
得到 5为什么会这样呢? 其实 @@IDENTITY 在联机丛书里就已经说的很清楚了, 它受会话限制.我们打开查询分析器时,建立了一个连接及进程或者说会话(默认会打开一个查询窗口), 新建窗口建立了连接下的另一个进程.
所以在第一个窗口中运行的东西, @@IDENTITY 位于同一会话中,可以取到.
到第二个窗口,因为会话不同,所以就取不到了.在你的VB程序里:CONN.EXECUTE("INSERT .....") '//这是一个进程或者说会话,这里指数据库进程,不是指vb进程
MSGBOX CONN.EXECUTE("SELECT @@IDENTITY")(0) '//这是另一个进程,所以取到NULL如果你写作
CONN.EXECUTE("INSERT ..... ; SELECT @@IDENTITY") 那么二者位于同一会话中,就可以取到了.如果你希望不受会话限制那么用 IDENT_CURRENT('表名'), 这样无论哪个进程中都能取到.
还有一个 SCOPE_IDENTITY, 它不限受会话限制,还受作用域限制.个人看法.仅供参考.
先用
sql="select @@identity as id"
执行此语句,得出结果,再用结果值代入你的语句中注意:insert数据库取 identity的值,前后语句的连接必须是同一连接,如不是同一连接,即@@identity不能取得前一语句insert所生成的identity值可把insert into 数据与你的
"insert into PRODUCT_IN values(@@Identity ,'" & _
txtProductInfo(2).Text & "','" & DTPickerDate.Value & "')"
合成一句sql 语句
再执行,即可取得@@identity的值