iT邦幫忙

0

如何修改table變數的欄位名稱

如標題所述,目前自己嘗試了一些方法都失敗。
假設我有一個table變數@tempTable,我想要將其欄位名稱[Type],調整為TypeId,在不使用兩個table變數的情境下,請問要下什麼語法呢?

原始碼如下:

declare @tempTable table (
	RowId int identity (1, 1)
	, [Type] nvarchar(4000)
)

insert @tempTable ([Type]) values ('Atype')

--找出@tempTable原始的長相
select * from @tempTable

--執行此段程式碼會有錯誤,請問要怎麼調整?
exec sp_rename @tempTable , [Type] , TypeId

--找出@tempTable調整欄位名稱後的長相
select * from @tempTable

@tempTable原始長相

RowId	Type
1	    Atype

@tempTable調整欄位名稱後的長相

RowId	TypeId
1	    Atype

錯誤訊息:

程序 sp_rename,行 0 [批次開始行 70] 運算元類型衝突: table 與 nvarchar 不相容

thwu iT邦新手 5 級 ‧ 2019-04-09 10:01:05 檢舉
@表格變數 只有在當前連線時才會存活,查詢一結束就回收掉了。
好奇是什麼樣的情境,無法直接一開始就宣告為 [TypeId],而需要嘗試在宣告後變更欄位名稱。
anniecat iT邦新手 5 級 ‧ 2019-04-09 10:11:33 檢舉
我的情境大概是,一開始依據邏輯條件與多表串連後,將結果丟到@tempTable,此時的[Type]是一個名稱 ; 之後會再依據情境條件呼叫function,並回傳[Type]的id,此時就會是[TypeId]。
其實,只是在閱讀程式上可以更直覺,所以才會嘗試調整table變數的欄位名稱~
後來保留了[Type]的欄位並新增[TypeId]的欄位,但仍很好奇能不能修改變數table的欄位名稱,因此做了發問~
thwu iT邦新手 5 級 ‧ 2019-04-11 09:40:59 檢舉
了解
不過你後來的做法 ([Type]的欄位並新增[TypeId]) 真的是較好的方式,Name 和 Value 分開儲存才不會亂掉。

2 個回答

1
暐翰
iT邦大師 1 級 ‧ 2019-04-08 20:09:34
最佳解答

Sql Server不支持重命名表變量列名,只支持Temp跟實體表

另外SP_Rename使用方式是
EXEC SP_RENAME '物件' , '新修改名稱', '物件類型'

舉例
EXEC SP_RENAME 'TestTable.Column01' , 'Column02', 'COLUMN'

可以閱讀此文章
Rename Table variable column name | SqlHints.com

0
PPTaiwan
iT邦新手 5 級 ‧ 2019-04-08 18:55:20

Declare @tempTable table (
RowId int identity (1, 1),
[Type] nvarchar(4000)
)

命名建議統一有 [] 就全部都有不要 又有又沒有....

SELECT
        RowID          AS     RowsAutokey
        [Type]         AS     Type
        
From @tempTable

我要發表回答

立即登入回答