日期:2014-05-18  浏览次数:20394 次

这个字符串在SQL SERVER2000 的存储过程中怎么写
insert   into   Memorabilia   select   @danweibh   as   JuniorNum,Number,Mcaption,Mname,Maddress,Mtime,Mcontent,Remark   from   OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ', 'data   source= "E:\教育工会二期数据库资料\send2007061301010001.mdb ";User   ID=Admin;Password= ')...Memorabilia

问题:
在存储过程中定义变量@path   varchar(50)/*用来存放文件(数据库文件)的路径*/
@dbasename   varchar(30)/*数据库的名字*/.@pwd   varchar(200)   set   @pwd= 'User   ID=Admin;Password= '
也就是将OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ', 'data   source= "E:\教育工会二期数据库资料\send2007061301010001.mdb ";User   ID=Admin;Password= ')分割
因为我要接受N个单位的数据。所以要循环给出数据。还有就是数据库表名是不是不能用变量传,我记得是这样的:参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。但是我目前的功能需求是数据库和表名都得循环给出。如何能实现?

------解决方案--------------------
declare @path varchar(50),@dbasename varchar(30),@pwd varchar(200)
set @path = 'E:\教育工会二期数据库资料\ '
set @dbasename = 'send2007061301010001.mdb '
set @pwd= 'User ID=Admin;Password= '
declare @sql varchar(8000)
set @sql = 'insert into Memorabilia
select @danweibh as JuniorNum,Number,Mcaption,Mname,Maddress,Mtime,Mcontent,Remark from
OpenDataSource( ' 'Microsoft.Jet.OLEDB.4.0 ' ', ' 'data source= " ' + @path + @dbasename + ' "; ' + @pwd + ' ' ') '
print @sql
EXEC(@sql)

/*@sql内容
insert into Memorabilia
select @danweibh as JuniorNum,Number,Mcaption,Mname,Maddress,Mtime,Mcontent,Remark from
OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ', 'data source= "E:\教育工会二期数据库资料\send2007061301010001.mdb ";User ID=Admin;Password= ')
*/
------解决方案--------------------
可以这样:

declare @path varchar(50)/*用来存放文件(数据库文件)的路径*/
declare @dbasename varchar(30)/*数据库的名字*/
declare @pwd varchar(200)

set @path= 'E:\教育工会二期数据库资料\ '
set @dbasename= 'send2007061301010001.mdb '
set @pwd= 'User ID=Admin;Password= '

declare @sql nvarchar(4000)
set @sql=N 'insert into Memorabilia select @danweibh as JuniorNum,Number,Mcaption,Mname,Maddress,Mtime,Mcontent,Remark from OpenDataSource( ' 'Microsoft.Jet.OLEDB.4.0 ' ', ' 'data source= " '+@Path+@dbasename+ ' "; '+@pwd+ ' ' ')...Memorabilia '

exec sp_executesql @sql,N '@danweibh numeric(10,2) ',@danweibh