Sql-Server
當從另一個上下文呼叫時,過程在哪個上下文中執行?
考慮:
use databaseA; go exec databaseB.dbo.spProcedure(); go
該過程是否針對 databaseA(呼叫它的上下文)或 databaseB(它所在的上下文)執行?
如果程序有
insert into myTable(example) values ('example');
…如果兩個數據庫都有相同的表 myTable,哪個數據庫將接收新記錄?
它在對象所在的數據庫的上下文中執行。範常式式碼:
CREATE DATABASE Temp1 GO USE [temp1] GO CREATE TABLE Data1 (Val VARCHAR(255)) GO INSERT INTO Temp1.dbo.Data1 (Val) VALUES ('Test1') GO CREATE PROCEDURE spTemp1 AS BEGIN SELECT * FROM dbo.Data1 END GO CREATE DATABASE Temp2 GO USE [temp2] GO CREATE TABLE Data1 (Val VARCHAR(255)) GO INSERT INTO Temp2.dbo.Data1 (Val) VALUES ('Test2') GO CREATE PROCEDURE spTemp2 AS BEGIN SELECT * FROM dbo.Data1 END GO USE [Temp1] GO EXEC Temp2.dbo.spTemp2 GO USE [master] GO DROP DATABASE Temp1 DROP DATABASE Temp2 GO
這突出表明,即使我們查詢兩個數據庫中都存在的“dbo.Data1”,但返回的值來自 Temp2 數據庫中的該表,因為這是儲存過程的上下文。
該範例是一個 SELECT,但對於 INSERT 也是如此。