【发布时间】:2013-06-18 17:16:42
【问题描述】:
有没有办法使用表中的列定义来定义存储过程中的变量?例如,在表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))。
如果需要进一步说明,请告诉我。
TIA!!
【问题讨论】:
-
你需要动态 SQL 来做你想做的事
-
T-SQL 并不是真正适用于元编程的语言。您的全部目的只是为了声明一个有趣类型的变量,还是您有实际问题要解决?
-
实际上,刚刚意识到您已经标记了 SQL-Server,但您的代码似乎不是 T-SQL。你标记错了吗?也许您的目标是甲骨文?
-
@Damien_The_Unbeliever 显然他想在 SQL Server 中做一些类似于 Oracle 代码正在做的事情
-
我包含的代码是我在 Oracle 博客中找到的示例代码。我希望将它用作一种“数据字典”。在表中定义它,然后每当您必须创建与列匹配的变量时,您都可以“动态地”执行它。如果列更改(通常只有长度),您不必搜索所有代码以确保变量也已更改。
标签: sql-server