我来自一个应用程序开发人员,后来被投入到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”。
这是正确的方法还是我只是在做一些愚蠢的事情?
答案 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
....
*/