時(shí)間:2024-02-05 12:47作者:下載吧人氣:21
SQL Server的嵌套存儲(chǔ)過程,外層存儲(chǔ)過程和內(nèi)層存儲(chǔ)過程(被嵌套調(diào)用的存儲(chǔ)過程)中可以存在相同名稱的本地臨時(shí)表嗎?如果可以的話,那么有沒有什么問題或限制呢? 在嵌套存儲(chǔ)過程中,調(diào)用的是外層存儲(chǔ)過程的臨時(shí)表還是自己定義的臨時(shí)表呢? 是否類似高級(jí)語言的變量一樣,本地臨時(shí)表有沒有“作用域“范圍呢?
注意:也可以稱呼為父存儲(chǔ)過程和子存儲(chǔ)過程,外層存儲(chǔ)過程和內(nèi)層存儲(chǔ)過程。這些只是不同的稱呼或叫法而已。我們這里統(tǒng)一使用外層存儲(chǔ)過程和內(nèi)層存儲(chǔ)過程。后續(xù)文章部分不再述說。
我們先來看一個(gè)例子,如下所示,我們構(gòu)造一個(gè)簡(jiǎn)單的例子。
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N’dbo.PRC_TEST’) AND OBJECTPROPERTY(object_id, ‘IsProcedure’) =1)
BEGIN
DROP PROCEDURE dbo.PRC_TEST
END
GO
CREATE PROC dbo.PRC_TEST
AS
BEGIN
CREATE TABLE #tmp_test(id INT);
INSERT INTO #tmp_test
SELECT 1;
SELECT * FROM #tmp_test;
EXEC PRC_SUB_TEST
SELECT * FROM #tmp_test
END
GO
IF EXISTS(SELECT 1 FROM sys.objects WHERE object_id= OBJECT_ID(N’dbo.PRC_SUB_TEST’ ) AND OBJECTPROPERTY(object_id, ‘IsProcedure’)=1)
BEGIN
DROP PROCEDURE dbo.PRC_SUB_TEST;
END
GO
CREATE PROCEDURE dbo.PRC_SUB_TEST
AS
BEGIN
CREATE TABLE #tmp_test(name VARCHAR(128));
INSERT INTO #tmp_test
SELECT name FROM sys.objects
SELECT * FROM #tmp_test;
END
GO
EXEC PRC_TEST;
網(wǎng)友評(píng)論