麻烦,OPENROWSET传递参数的问题。

winsock2000 2008-04-13 03:34:59
从另外一台数据库服务器执行存储过程,并把结果集插入到本地服务器上面的临时表,然后在跟本地服务器上的数据比较,所以涉及到用openrowset传递参数的问题,可openrowset传递好像只能用动态的写法,执行成功后,临时表消亡了,我都无法在继续做下面的比较了,如果我用全局临时表,倒是可以解决这个问题的,但不想用。随便举个例:
declare @sql varchar(1000)
declare @flag_Year varchar(4)
declare @flag_Month varchar(2)
declare @flag_rq datetime
set @flag_year='2007'
set @flag_month='12'
set @flag_rq='2007-11-30'
set @sql='
select * into #lrb
from openrowset(''sqloledb'',''127.0.0.1'';''sa'';'''',
''set fmtonly off;exec sqlserver.dbo.sz_a1 '''''+@flag_Year+''''','''''+@flag_Month+''''',
'''''+CONVERT(Varchar(10),@flag_rq,20)+''''' '')'
exec(@sql) ---执

select * from #lrb ---这里就提示没有找到对象了。
各位有没有碰到这个问题,要如何解决?请指点一二,谢谢了。
declare @flag_Year varchar(4)
declare @flag_Month varchar(2)
declare @flag_rq datetime
set @flag_year='2007'
set @flag_month='12'
set @flag_rq='2007-11-30'
select * into #lrb
from openrowset('sqloledb','127.0.0.1';'sa';'',
'set fmtonly off;exec sqlserver.dbo.st_k3sccblrb '''+@flag_ErpYear+''','''+@flag_Month+''',
'''+CONVERT(Varchar(10),@flag_rq,20)+''' ') --要是能这样执行,那我的问题也解决了,可找了一下,好像不支持这样的写法。

...全文
432 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
winsock2000 2008-04-13
  • 打赏
  • 举报
回复
太简单了,怎么刚才没有想到,结账。
-狙击手- 2008-04-13
  • 打赏
  • 举报
回复
create proc proc_test @i int
as
select 1 as id
go


select * into #lrb
from openrowset('sqloledb','127.0.0.1';'sa';'',
'set fmtonly off;declare @I int set @I = 1 exec csdn_test..proc_test @i')

select * from #lrb

drop proc proc_test
drop table #lrb

/*

id
-----------
1

(所影响的行数为 1 行)
*/
wzy_love_sly 2008-04-13
  • 打赏
  • 举报
回复
都很强大
hery2002 2008-04-13
  • 打赏
  • 举报
回复
如果单纯从另外一个数据库中查出记录来和本地的做比较,
直接本地数据库创建了Linked Server,在本地查询出来写入临时表即可比较了.
那就不需要使用到Openrowset了.这个貌似把LZ的需求的变化了,呵呵 :)
pt1314917 2008-04-13
  • 打赏
  • 举报
回复

--哦,理解错楼主的意思了。。
应该像二楼那样先创建临时表。不过要知道表结构。

Limpire 2008-04-13
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
declare @flag_Year varchar(4)
declare @flag_Month varchar(2)
declare @flag_rq datetime
set @flag_year='2007'
set @flag_month='12'
set @flag_rq='2007-11-30'

create table #lrb(col_list...)--先定义临时表

set @sql='
--select * into #lrb
insert into #lrb select *
from openrowset(''sqloledb'',''127.0.0.1'';''sa'';'''',
''set fmtonly off;exec sqlserver.dbo.sz_a1 '''''+@flag_Year+''''','''''+@flag_Month+''''',
'''''+CONVERT(Varchar(10),@flag_rq,20)+''''' '')'
exec(@sql) ---执

select * from #lrb ---这里就不会提示没有找到对象了。
Limpire 2008-04-13
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
declare @flag_Year varchar(4)
declare @flag_Month varchar(2)
declare @flag_rq datetime
set @flag_year='2007'
set @flag_month='12'
set @flag_rq='2007-11-30'

create table #lrb(col_list...)--先定义临时表

set @sql='
--select * into #lrb
insert into #lrb
from openrowset(''sqloledb'',''127.0.0.1'';''sa'';'''',
''set fmtonly off;exec sqlserver.dbo.sz_a1 '''''+@flag_Year+''''','''''+@flag_Month+''''',
'''''+CONVERT(Varchar(10),@flag_rq,20)+''''' '')'
exec(@sql) ---执
pt1314917 2008-04-13
  • 打赏
  • 举报
回复

--这样?

declare @sql varchar(1000)
declare @flag_Year varchar(4)
declare @flag_Month varchar(2)
declare @flag_rq datetime
set @flag_year='2007'
set @flag_month='12'
set @flag_rq='2007-11-30'
set @sql='select * into #lrb
from openrowset(''sqloledb'',''127.0.0.1'';''sa'';'''',
''set fmtonly off;exec sqlserver.dbo.sz_a1 '''''+@flag_Year+''''','''''+@flag_Month+''''',
'''''+CONVERT(Varchar(10),@flag_rq,20)+''''' '') select * from #lrb'
exec(@sql)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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