存储过程中可以使用参数做为数据库名吗?

51liveup 2004-11-28 01:55:42
我想在两个数据库之前导入导出一些数据.想把数据库名做为参数传到存储过程中,但运行时提示对象名无效.
不知道这样写对不对,能不能实现???


create procedure JfRecordP
@databaseS varchar(50),
--目标数据库
@databaseT varchar(50) as
select @databases,@databaseT

DELETE FROM [@databaseS]..tjbtemp
INSERT INTO [@databaseS].[dbo].[tjbtemp]([CsCardId], [Maxid])(SELECT cardid,MAX(AutoID) AS Expr1
FROM [@databaseS].[dbo].[JfRecord]
WHERE ([CardId] <> '')
GROUP BY [CardId])

INSERT INTO [@databaseT].[dbo].[JfRecord]
(CardId, iYear, iperiod, dDate, Zy, mCk, bzs, syl, Moneys, FjfMoneys, EcgxMoneys,
mJe, mznj, UserID, cPrint, cSend)
(SELECT [@databaseS].[dbo].[JfRecord].CardId, [@databaseS].[dbo].[JfRecord].iYear, [@databaseS].[dbo].[JfRecord].iperiod, [@databaseS].[dbo].[JfRecord].dDate, [@databaseS].[dbo].[JfRecord].Zy,
[@databaseS].[dbo].[JfRecord].mCk, [@databaseS].[dbo].[JfRecord].bzs,[@databaseS].[dbo].[JfRecord].syl, [@databaseS].[dbo].[JfRecord].Moneys, [@databaseS].[dbo].[JfRecord].FjfMoneys,
[@databaseS].[dbo].[JfRecord].EcgxMoneys, [@databaseS].[dbo].[JfRecord].mJe, [@databaseS].[dbo].[JfRecord].mznj, [@databaseS].[dbo].[JfRecord].UserID,
[@databaseS].[dbo].[JfRecord].cPrint, [@databaseS].[dbo].[JfRecord].cSend
FROM [@databaseS].[dbo].[JfRecord] INNER JOIN
[@databaseS].[dbo].[tjbtemp] ON [@databaseS].[dbo].[JfRecord].AutoID = [@databaseS].[dbo].[tjbtemp].Maxid)

go
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunangel 2004-12-08
  • 打赏
  • 举报
回复
如果存储过程还带有参数怎么办?
51liveup 2004-11-28
  • 打赏
  • 举报
回复
搞定了.方法一样.谢谢参与
tollers 2004-11-28
  • 打赏
  • 举报
回复
EXEC('DELETE FROM [' + @databaseS + '].tjbtemp')

以下语句差不多是这样,用EXEC命令
vinsonshen 2004-11-28
  • 打赏
  • 举报
回复
create procedure JfRecordP
@databaseS varchar(50),
--目标数据库
@databaseT varchar(50) as

exec('
DELETE FROM ['+@databaseS+']..tjbtemp
INSERT INTO ['+@databaseS+'].[dbo].[tjbtemp]([CsCardId], [Maxid])(SELECT cardid,MAX(AutoID) AS Expr1
FROM ['+@databaseS+'].[dbo].[JfRecord]
WHERE ([CardId] <> '''')
GROUP BY [CardId])

INSERT INTO ['+@databaseT+'].[dbo].[JfRecord]
(CardId, iYear, iperiod, dDate, Zy, mCk, bzs, syl, Moneys, FjfMoneys, EcgxMoneys,
mJe, mznj, UserID, cPrint, cSend)
(SELECT ['+@databaseS+'].[dbo].[JfRecord].CardId, ['+@databaseS+'].[dbo].[JfRecord].iYear, ['+@databaseS+'].[dbo].[JfRecord].iperiod, ['+@databaseS+'].[dbo].[JfRecord].dDate, ['+@databaseS+'].[dbo].[JfRecord].Zy,
['+@databaseS+'].[dbo].[JfRecord].mCk, ['+@databaseS+'].[dbo].[JfRecord].bzs,['+@databaseS+'].[dbo].[JfRecord].syl, ['+@databaseS+'].[dbo].[JfRecord].Moneys, ['+@databaseS+'].[dbo].[JfRecord].FjfMoneys,
['+@databaseS+'].[dbo].[JfRecord].EcgxMoneys, ['+@databaseS+'].[dbo].[JfRecord].mJe, ['+@databaseS+'].[dbo].[JfRecord].mznj, ['+@databaseS+'].[dbo].[JfRecord].UserID,
['+@databaseS+'].[dbo].[JfRecord].cPrint, ['+@databaseS+'].[dbo].[JfRecord].cSend
FROM ['+@databaseS+'].[dbo].[JfRecord] INNER JOIN
['+@databaseS+'].[dbo].[tjbtemp] ON ['+@databaseS+'].[dbo].[JfRecord].AutoID = ['+@databaseS+'].[dbo].[tjbtemp].Maxid)
')
go

库名为外部变量,必须包含在exec中作为外部变量调用

34,587

社区成员

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

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