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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在動態(tài)sql語句中使用表變量?

如何在動態(tài)sql語句中使用表變量?

12345678_0001 2019-10-19 16:28:52
在存儲過程中,我在過程之上聲明了兩個表變量?,F(xiàn)在,我試圖在動態(tài)sql語句中使用該表變量,但是在執(zhí)行該過程時遇到此錯誤。我正在使用Sql Server 2008。這就是我的查詢的樣子,set @col_name =  'Assoc_Item_'               + Convert(nvarchar(2), @curr_row1);set @sqlstat = 'update @RelPro set '              + @col_name              + ' = (Select relsku From @TSku Where tid = '              + Convert(nvarchar(2), @curr_row1) + ') Where RowID = '              + Convert(nvarchar(2), @curr_row);Exec(@sqlstat);我收到以下錯誤,必須聲明表變量“ @RelPro”。必須聲明表變量“ @TSku”。我試圖將表放在動態(tài)查詢的字符串塊之外,但無濟(jì)于事。
查看完整描述

3 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

您的EXEC在不同的上下文中執(zhí)行,因此它不知道在原始上下文中已聲明的任何變量。您應(yīng)該能夠使用臨時表而不是表變量,如下面的簡單演示所示。


create table #t (id int)


declare @value nchar(1)

set @value = N'1'


declare @sql nvarchar(max)

set @sql = N'insert into #t (id) values (' + @value + N')'


exec (@sql)


select * from #t


drop table #t


查看完整回答
反對 回復(fù) 2019-10-19
?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個贊

在SQL Server 2008+上,可以使用表值參數(shù)將表變量傳遞給動態(tài)SQL語句,只要您不需要更新表本身中的值即可。


因此,從您發(fā)布的代碼中,您可以將這種方法用于@TSku但不能用于@RelPro


下面的示例語法。


CREATE TYPE MyTable AS TABLE 

Foo int,

Bar int

);

GO



DECLARE @T AS MyTable;


INSERT INTO @T VALUES (1,2), (2,3)


SELECT *,

        sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]

FROM @T


EXEC sp_executesql

  N'SELECT *,

        sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]

    FROM @T',

  N'@T MyTable READONLY',

  @T=@T 

physloc包含該列只是為了證明子作用域中引用的表變量絕對與外部作用域相同,而不是副本。


查看完整回答
反對 回復(fù) 2019-10-19
?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個贊

你不具備使用動態(tài)SQL


update

    R

set

    Assoc_Item_1 = CASE WHEN @curr_row = 1 THEN foo.relsku ELSE Assoc_Item_1 END,

    Assoc_Item_2 = CASE WHEN @curr_row = 2 THEN foo.relsku ELSE Assoc_Item_2 END,

    Assoc_Item_3 = CASE WHEN @curr_row = 3 THEN foo.relsku ELSE Assoc_Item_3 END,

    Assoc_Item_4 = CASE WHEN @curr_row = 4 THEN foo.relsku ELSE Assoc_Item_4 END,

    Assoc_Item_5 = CASE WHEN @curr_row = 5 THEN foo.relsku ELSE Assoc_Item_5 END,

    ...

from

    (Select relsku From @TSku Where tid = @curr_row1) foo

    CROSS JOIN

    @RelPro R

Where

     R.RowID = @curr_row;


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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