有没有办法在表中使用列的定义来定义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 !!
答案 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?。