使用另一个数据库的存储过程

时间:2014-07-25 09:18:50

标签: sql-server tsql stored-procedures

我在database1中有一些程序用于使用INSERT语句填充某些表。

我要填写的表位于database2。如何使用EXEC procedures编写查询以填充这些表?

我不想在表的同一个数据库中添加存储过程(database2

这是db1

中的存储过程之一
USE [database1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[AddSubject]
@SubjectCode nvarchar(20),
@Credits int,
@Hours int

AS

INSERT INTO [database2].[dbo].[Subject]
       ([Code]
       ,[Credits]
       ,[Hours])
 VALUES
       (@SubjectCode,
       @Credits,
       @Hours)

 Return @@Identity 

这是执行存储过程的地方:

EXEC    @SubID = [database1].[dbo].[AddSubject] @SubjectCode='1234', @Credits=2, @Hours=50

它给了我错误:

Msg 208, Level 16, State 1, Procedure AddSubject, Line 14
Invalid object name 'database2.dbo.Subject'.

2 个答案:

答案 0 :(得分:3)

您可以使用four-part name

引用SQL Server表
server.database.schema.table

对于其他数据库,您只需要最后三部分:

insert  otherdb.dbo.yourtable 
        (col1, col2, ...) 
values  ('val1', 'val2', ...)

您可以在存储过程中使用它来插入到不同数据库的表中。

答案 1 :(得分:0)

是的!您可以将database2访问到database1中,这样做两个数据库应该是一个服务器

如果您的scheema是 dbo ,那么您可以按以下方式访问: -

Insert into database1..table_name (col1,col2)
select value1,value2

如果你的Scheema 除了dbo ,那么: -

Insert into database1.Scheema_name.table_name (col1,col2)
select value1,value2