根据表中列的定义在sproc中创建变量

时间:2013-06-18 17:16:42

标签: sql-server

有没有办法在表中使用列的定义来定义sproc中的变量?例如,在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 !!

1 个答案:

答案 0 :(得分: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?