存储过程如下:
CREATE procedure xp_checktemptable
(
@v_userid varchar(5),
@i_out int out
)
as declare @v_sql varchar(100);
begin
if object_id('tempdb.dbo.##'+@v_userid) is null
begin
set @v_sql = 'create table ##'+@v_userid+' (userid varchar(5))';
exec (@v_sql);
set @i_out = 0;
end
else
set @i_out = 1;
end;
GO在本地个人版SQL SERVER里调试是通过的,第一次执行,I_OUT=0,第二次执行I_OUT=1。
可是在数据库服务器上建立相同的存储过程,I_OUT始终为0谁来帮助我啊。
CREATE procedure xp_checktemptable
(
@v_userid varchar(5),
@i_out int out
)
as declare @v_sql varchar(100);
begin
if object_id('tempdb.dbo.##'+@v_userid) is null
begin
set @v_sql = 'create table ##'+@v_userid+' (userid varchar(5))';
exec (@v_sql);
set @i_out = 0;
end
else
set @i_out = 1;
end;
GO在本地个人版SQL SERVER里调试是通过的,第一次执行,I_OUT=0,第二次执行I_OUT=1。
可是在数据库服务器上建立相同的存储过程,I_OUT始终为0谁来帮助我啊。
通过什么方式调用的?直接在查询分析器中执行的?每次执行时,把@v_sql的内容print出来看看。
set pCmd = Server.CreateObject("ADODB.Command")
pCmd.ActiveConnection = Conn
pCmd.CommandType=4 'adCmdStoredProc
pCmd.CommandText = "xp_checktemptable"
pCmd.Parameters.Append pCmd.CreateParameter("userid", adVarChar, adParamInput, 5, "")
pCmd.Parameters.Append pCmd.CreateParameter("out", adInteger, adParamOutput, 4, iout)
pCmd.Parameters("userid") = cstr(rs("id"))
set res = pCmd.Execute(,,adCmdStoredProc+adExecuteNoRecords)
Response.Write cstr(pCmd.Parameters("out").Value)
pCmd.activeconnection = nothing
set pCmd = nothing
@v_sql就是比如 create table ##10000 (userid varchar(5))
这个在查询分析器里是正常的,在sysobjects里可以看到创建的临时表。但是在ASP里执行就是查不到有创建临时表。
--------------------
这样即使是全局临时表,生命期也结束啦,当然每次都要重建,所以每次I_OUT始终为0