如何在用户定义的表类型中完全限定列名?

时间:2014-03-04 02:37:36

标签: sql sql-server syntax user-defined-types

使用用户定义的表类型(我正在使用它以便将表值参数传递给存储过程)时,我有一个奇怪的语法问题。

这是一个样本类型定义:

CREATE TYPE tvp_Test AS TABLE
(
    Column1 int NOT NULL,
    Column2 int NOT NULL
)

这是一张测试表:

DECLARE @Test tvp_Test
INSERT INTO @Test VALUES (10,11)
INSERT INTO @Test VALUES (20,21)
INSERT INTO @Test VALUES (30,31)

这些命令可以正常工作:

SELECT * FROM @Test
SELECT Column1 FROM @Test

但是,尝试完全限定列名会产生语法错误:

SELECT @Test.Column1 FROM @Test      -- Doesn't work

引号的任何组合似乎都没有帮助:

SELECT @Test.'Column1' FROM @Test    -- Doesn't work either
SELECT '@Test'.Column1 FROM @Test    -- As above
SELECT '@Test'.'Column1' FROM @Test  -- Still no luck
SELECT '@Test.Column1' FROM @Test    -- This works but selects the text '@Test.Column1'

这似乎不是一个可怕的问题......直到你开始加入牌桌。然后它变成了皇室的痛苦。

在使用用户定义的表类型时,如何完全限定列名?

1 个答案:

答案 0 :(得分:1)

您可以为表变量添加别名,如

SELECT A.Column1 FROM @Test A