2013-06-18 43 views
3

有沒有辦法在表中使用列定義來定義存儲區中的變量?例如在Employees表中,有一個名爲LastName的列。在INFORMATION_SCHEMA.COLUMNS中,您可以獲取DATA_TYPE('nvarchar')和CHARACTER_MAXIMUM_LENGTH(50)。我想知道是否可以使用這兩個描述符來在sproc中創建一個變量。我看到有人在Oracle中使用的技術非常相似。他們創造了一個表,並使用的定義來聲明一個變量:基於表中列的定義在存儲區中創建變量

CREATE TABLE TEST_CONSTANTS (
    MAX_LEN VARCHAR2(32) 
); 


DECLARE x TEST_CONSTANTS.MAX_LEN%TYPE; 
BEGIN 
    x := 'Test'; 
    dbms_output.put_line(x); 
END; 

我希望做一些類似的。這樣,如果表中的列更改,我可能不必更改我的代碼(也寧願不使用varchar(max))。

讓我知道是否需要進一步澄清。

TIA !!

+0

您需要動態SQL來做你想做的事 – Lamak

+0

T-SQL並不是真正的元語言編程。你的全部目的只是爲了聲明一個有趣的類型的變量,還是你有一個實際的問題需要解決? –

+0

其實,剛剛意識到你已經標記了SQL-Server,但你的代碼看起來並不是T-SQL。你錯了嗎?也許你正在瞄準甲骨文? –

回答

1

沒有TSQL語法來根據列的類型定義變量的數據類型。

原則上,您可以使用用戶定義的數據類型做一些類似的,

CREATE TYPE [dbo].[EmployeeLastName] 
FROM [nvarchar](50) NOT NULL; 

GO 

CREATE TABLE [dbo].[Employee] 
    (
    EmployeeId INT PRIMARY KEY, 
    LastName [dbo].[EmployeeLastName] NOT NULL 
) 

DECLARE @X [dbo].[EmployeeLastName] 

SET @X = 'Test' 

但在實踐中,他們有這將可能使你分心的想法各種限制。其中一些參見Bart Duncan的文章T-SQL UDTs. (Huh!) What are they good for?