在你说我之前 我放了retainsameconnection,我放了。
我也对所有组件进行了延迟验证
在其他查询后我使用这个动态临时表 这失败了(有时)说临时表不存在。
我该如何解决?
这是我的询问..
declare @usuario varchar(100)
declare @contra varchar(100)
declare @servidor varchar(100)
declare @based varchar(100)
declare @nombretabla varchar(100)
set @usuario ='pruebas'
set @contra ='123'
set @servidor ='1.6.7.9'
set @based ='op'
set @nombretabla='tablaBC245B7A910D4B488CC9EFF0EFD3C177'
/*this was a dynamic name got with this query in other execute sql task
declare @tabla varchar(50)
set @tabla=NEWID ()
set @tabla =REPLACE (@tabla ,'-','')
select 'tabla'+@tabla nombre
*/
declare @cadena varchar(500)
set @cadena ='SERVER='+@servidor+';DataBasE='+@based +
';uid='+@usuario +';pwd='+@contra+';'
set @cadena =''''+@cadena +''''
while OBJECT_ID('tempdb..##envases'+@nombretabla) IS NULL
begin
exec('
SELECT * into ##envases'+@nombretabla+'
FROM OPENROWSET(
''SQLNCLI'',
'+@cadena+',
''
select pro=p.pro,envase=e.pro from procorp p
join procorp e on p.envase=e.envase and e.esenvase=1
union all select pro=-1,envase=-1
'')
'
)
end
IF OBJECT_ID('tempdb..#primera') IS NOT NULL DROP TABLE #primera
IF OBJECT_ID('tempdb..#end') IS NOT NULL DROP TABLE #end
create table #primera(
pro int,
envase int
)
insert into #primera
exec('select * from ##envases'+@nombretabla+'')
select fila='select pro='+CONVERT(varchar(10),pro)+
', envase='+CONVERT(varchar(10),envase)+' union all '
into #end
from #primera
--select * from #end
--drop table #end
--drop table #primera
alter table #end
add
uno int not null default(1),
id int identity
declare @maximo int
set @maximo =(select MAX(id) from #end )
update #end set fila=fila+'terminado' where id=@maximo
update #end set fila=replace(fila,'union all terminado','') where id=@maximo
select uno, ' begin try drop table #tmpenvase end try begin catch end catch
select * into #tmpenvase from ( '+
convert(varchar(max),STUFF(
(select '', convert(varchar(max),fila) from #end order by id
for xml path('') )
,1,0,'') )+' ) q 'cadena
from #end e
group by uno
答案 0 :(得分:0)
我会使用标准的SSIS对象。 我真的不能遵循你的脚本的最终目标,但通常是:
可以使用配置文件,变量和其他方法管理连接字符串。 在数据流任务中,OLE DB源转换可以运行SELECT语句,OLE DB目标可以传递数据,OLE DB命令可以运行UPDATE语句。
我会根据一系列任务重新构想您的需求,而不是试图将所有内容强制转换为单个T-SQL脚本。
答案 1 :(得分:0)
全局临时表在创建后对任何用户及任何连接都可见,并且当引用该表的所有用户与SQL Server实例断开连接时,将被删除。
根据SQL Server Books-Online的那一段;一旦SQL Server找不到与全局临时表的任何连接,那么将删除这些临时表,并且当您使用EXEC
命令创建本地临时表时SQL Server将删除该本地临时表,这也将应用到一个全局临时表,但检查所有用户连接后,等等。我认为有时SQL Server会在您的下一个语句提交之前单独找到您的全局临时表。
我建议您使用本地表变量并使用INSERT EXEC
填充它们。