3

有没有办法使用表中的列定义来定义存储过程中的变量?例如,在表Employees 中有一个名为LastName 的列。在 INFORMATION_SCHEMA.COLUMNS 中,您可以获得 DATA_TYPE ('nvarchar') 和 CHARACTER_MAXIMUM_LENGTH (50)。我想知道是否可以使用这两个描述符在存储过程中创建一个变量。我看到有人在 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) )。

让我知道是否需要进一步澄清。

蒂亚!!

4

1 回答 1

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 UDT。(嗯!)它们有什么用?其中一些。

于 2013-06-18T20:44:11.437 回答