T-SQL将外部变量连接到表中

时间:2018-11-29 03:10:09

标签: sql-server tsql

我来自一个应用程序开发人员,后来被投入到Web开发人员中,我开始处理非对称数据请求/返回以及如何处理它们。

我需要发出许多SQL请求,尽管管理返回哪些请求的最佳方法是在返回sql表中插入UUID或类似内容。

另外,通常来说,我的SQL语言非常基础,但是我想在返回的表中添加一个外部值,其中@ext是从原始请求中添加的外部数据。

SELECT *
FROM
    @ext AS uuid,
    dbo.Orders
WHERE ....

预期收益表

uuid:  12234
customer: jack
orderNo: 774
postAddy: 123 Albert St
...

我总是得到的错误是“但声明表变量“ @ext”。

这是正确的方法还是我只是在做一些愚蠢的事情?

2 个答案:

答案 0 :(得分:2)

您收到的错误消息是您尚未声明表变量@ext。这是因为您在@子句中使用了变量名(带有FROM前缀),希望在其中使用表或其他类似表的对象(即表,视图,表变量,TVF等)。

@ext变量似乎是标量(单值)变量,因此在FROM子句中无法识别。您应该尝试这样的事情:

SELECT 
    -- scalar values and column names / aliases go here
    @ext AS uuid, *
FROM        
    -- only tables, views, table variables, TVF's etc go here
    dbo.Orders
WHERE ....

请注意,如果您的查询返回多行,则它们对uuid的值都相同。在管理从多个查询返回的数据方面,这可能是理想的,也可能不是理想的,并且可能有更好的方法来实现所需的目标,但这最好是在有了一个可行的示例后再提出另一个问题。

答案 1 :(得分:1)

确保您知道@ext是什么,以及如何正确引用它。

如果是sacalar值,则可以在表达式中使用它:

DECLARE @ext INT = 5

SELECT
    @ext AS ScalarValue,
    @ext + 10 AS ScalarOperation,
    @ext + S.SomeColumn AS ScalarOperationWithTableColumn
FROM
    SomeTable AS S

如果它是一个表变量,则可以将其引用为表(如您的示例所示):

DECLARE @ext TABLE (
    FirstValue INT,
    SecondValue VARCHAR(100))

INSERT INTO @ext (
    FirstValue,
    SecondValue)
VALUES
    (10, 'SomeText'),
    (20, 'AnotherText')

SELECT
    E.FirstValue,
    E.SecondValue
FROM
    @ext AS E
/*
    LEFT JOIN ....
WHERE
    ....
*/