2014-09-24 63 views
0

嗨我知道在PL/SQL中可以使用引用类型为%TYPE的列,但我想知道T-SQL中是否有相同的东西。过程 - 创建引用其他表列类型的表

PROCEDURE .... 

CREATE TABLE TABLE_B 
(
    ID NUMBER NOT NULL, 
    NAME TABLE_A.NAME%TYPE 
); 

... END PROCEDURE 

这可能吗?

+2

否:http://doc.ispirer.com/sqlways/Output/SQLWays-1-041.html。它声明,“Microsoft SQL Server不支持,并且没有Oracle%TYPE的等效项。”或MSFT论坛:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/c1a3e39e-ba83-4573-82b6-4ddedb626d21/sql-server-equivalent-of-oracles-tablecolumnnametype?forum=transactsql如果您的表格数据类型可能会发生变化,您可以在表格和proc中使用用户定义类型。这将意味着您对UDT所做的任何更改都会对表和proc进行更改。 – xQbert 2014-09-24 14:37:20

+0

http://stackoverflow.com/questions/1849396/t-sqls-equivalent-of-oracles-type-operator先前提问和回答。这只是表明,自2009年以来它并未被添加。 – xQbert 2014-09-24 14:49:15

回答

1

短的答案编号:

我验证的大风扇所以这里有3个来源,所有的说法基本相同的事情:没有,但它可以模拟(虽然痛苦),并将其添加了一层复杂性,以设计和维护。

参考文献:

  1. Microsoft SQL Server does not support and has no an equivalent of Oracle %TYPE.
  2. If your table's data type is likely to change, you can use a user-defined-type in both the table and the proc. This will mean that any changes you make to the UDT are made to both the table and the proc
  3. Migrating to SQL server from Oracle
  4. 的用户自定义类型

实施例:

的Oracle的%TYPE数据类型,可以创建可变并定义该变量的数据类型d通过表或视图列或PL/SQL包变量。

在T-SQL中没有Oracle的%TYPE数据类型的等价物,但可以使用用户定义的数据类型(UDT)进行模拟(不太方便)。以下是一个示例:

EXEC sp_addtype 'MyType', 'smallint', NULL 

CREATE TABLE MyTable (i MyType) 

CREATE PROC MyProc 
AS 
BEGIN 
DECLARE @i MyType 
END