第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

錯(cuò)誤:“不能嵌套INSERT EXEC語(yǔ)句。”和“不能在INSERT-EXEC語(yǔ)句內(nèi)

錯(cuò)誤:“不能嵌套INSERT EXEC語(yǔ)句。”和“不能在INSERT-EXEC語(yǔ)句內(nèi)

白板的微信 2019-10-17 15:33:34
我有三個(gè)存儲(chǔ)過(guò)程Sp1,Sp2和Sp3。第一個(gè)(Sp1)將執(zhí)行第二個(gè)(Sp2)并將返回的數(shù)據(jù)保存到@tempTB1,第二個(gè)將執(zhí)行第三個(gè)(Sp3)并將數(shù)據(jù)保存到@tempTB2。如果我執(zhí)行,Sp2它將正常工作,它將從中返回我的所有數(shù)據(jù)Sp3,但是問(wèn)題出在Sp1,當(dāng)我執(zhí)行它時(shí),它將顯示此錯(cuò)誤:INSERT EXEC語(yǔ)句不能嵌套我試圖更改位置,execute Sp2但顯示另一個(gè)錯(cuò)誤:不能在INSERT-EXEC語(yǔ)句中使用ROLLBACK語(yǔ)句。
查看完整描述

3 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

嘗試從存儲(chǔ)過(guò)程鏈中“冒泡”數(shù)據(jù)時(shí),這是一個(gè)常見(jiàn)問(wèn)題。SQL Server中的一個(gè)限制是您一次只能激活一個(gè)INSERT-EXEC。我建議查看“ 如何在存儲(chǔ)過(guò)程之間共享數(shù)據(jù)”,這是一篇非常詳盡的文章,介紹了解決此類問(wèn)題的模式。


例如,一種變通方法是將Sp3轉(zhuǎn)換為表值函數(shù)。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

這是在SQL Server中執(zhí)行此操作的唯一“簡(jiǎn)單”方法,而無(wú)需使用一些復(fù)雜的復(fù)雜創(chuàng)建函數(shù)或已執(zhí)行的sql字符串調(diào)用,這兩種方法都是很糟糕的解決方案:


創(chuàng)建一個(gè)臨時(shí)表

openrowset您的存儲(chǔ)過(guò)程數(shù)據(jù)

例:


INSERT INTO #YOUR_TEMP_TABLE

SELECT * FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','set fmtonly off EXEC [ServerName].dbo.[StoredProcedureName] 1,2,3')

注意:必須使用“ set fmtonly off”,并且不能在包含存儲(chǔ)過(guò)程參數(shù)的字符串或表名的openrowset調(diào)用中向其中添加動(dòng)態(tài)sql。這就是為什么您必須使用臨時(shí)表而不是表變量的原因,這樣做會(huì)更好,因?yàn)樗诖蠖鄶?shù)情況下會(huì)執(zhí)行臨時(shí)表。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

好的,在吉姆哈克(Jimhark)的鼓勵(lì)下,這是舊的單個(gè)哈希表方法的示例:-


CREATE PROCEDURE SP3 as


BEGIN


    SELECT 1, 'Data1'

    UNION ALL

    SELECT 2, 'Data2'


END

go



CREATE PROCEDURE SP2 as


BEGIN


    if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))

        INSERT INTO #tmp1

        EXEC SP3

    else

        EXEC SP3


END

go


CREATE PROCEDURE SP1 as


BEGIN


    EXEC SP2


END

GO



/*

--I want some data back from SP3


-- Just run the SP1


EXEC SP1

*/



/*

--I want some data back from SP3 into a table to do something useful

--Try run this - get an error - can't nest Execs


if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))

    DROP TABLE #tmp1


CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))


INSERT INTO #tmp1

EXEC SP1



*/


/*

--I want some data back from SP3 into a table to do something useful

--However, if we run this single hash temp table it is in scope anyway so

--no need for the exec insert


if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))

    DROP TABLE #tmp1


CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))


EXEC SP1


SELECT * FROM #tmp1


*/


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 1834 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)