2013-06-18 1 views
3

Есть ли способ использовать определение столбца в таблице для определения переменной в sproc? Например, в таблице Employees имеется столбец с именем LastName. В INFORMATION_SCHEMA.COLUMNS вы можете получить DATA_TYPE ('nvarchar') и CHARACTER_MAXIMUM_LENGTH (50). Я хотел бы знать, можно ли использовать эти два дескриптора, чтобы создать переменную в sproc. Я видел технику, которая использовалась в Oracle, которая была очень похожа. Они создали таблицу и использовали определение для объявления переменной:Создать переменную в sproc на основе определения столбца в таблице

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. Вы ошиблись? Может быть, вы нацелены на Oracle? –

ответ

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' 

Но на практике они имеют различные ограничения, которые, вероятно, поставит вас от этой идеи. См. Статью Барта Дункана T-SQL UDTs. (Huh!) What are they good for? для некоторых из них.

Смежные вопросы