Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql where子句中的列别名给出无效列名错误_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql where子句中的列别名给出无效列名错误

Sql where子句中的列别名给出无效列名错误,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,这是一个简单的问题,我挂断了。我想知道是否可以创建列别名,然后在我的WHERE子句中使用它,即: SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER FROM TABLE WHERE NUMBER = '4' 请记住,这只是我尝试做的一个例子。我正在运行的查询有点复杂,但只是关于如何创建变量然后在子句中使用它的基本思想 我的问题是关于where子句中的别名列。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们

这是一个简单的问题,我挂断了。我想知道是否可以创建列别名,然后在我的
WHERE
子句中使用它,即:

SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER
FROM TABLE
WHERE NUMBER = '4'
请记住,这只是我尝试做的一个例子。我正在运行的查询有点复杂,但只是关于如何创建变量然后在子句中使用它的基本思想

我的问题是关于where子句中的别名列。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们只有6位数字时,查询工作正常,但现在我们有7位数字,我遇到了一个错误,我正在尝试以不同的方式重写查询。

看一下:

变量的基本语法如下所示:

declare @id int
select @id = 1

select *
from myTable
where id = @id
编辑:如果您实际上是在where子句中询问列别名,而不是sql变量,请查看以下问题:

EDITx2:

对于您的特定情况(假设询问列别名),您可以执行以下操作:

SELECT *
FROM (
    SELECT TRACTOR, CONVERT(VARCHAR(100), ORDER) AS NUMBER
    FROM TABLE
) someTableAlias
WHERE NUMBER = '4'

虽然你可能想重新考虑你的列名。。。我认为数字和顺序都是保留字,应该尽可能避免使用。我相信,您可以通过使用[order]和[number]来解决这些问题,但最好还是避免将保留字作为列/表/其他内容。

重新使用别名列是交叉应用的一个很好的用例:

SELECT t.TRACTOR, CxA.Num
FROM TABLE t
CROSS APPLY
  (SELECT CONVERT(VARCHAR(10), ORDER)) CxA(Num)
WHERE CxA.Num = '4'

交叉应用
中的任何内容都可以在
选择
其中
排序等中引用,但有一些限制(通常,如果在
交叉应用
表达式中有聚合)。

对于初学者,请停止使用类似的延迟声明。接下来,您不能在
WHERE
子句中引用别名。最后,如果订单是数字,为什么要使用字符串?对不起,我刚才只是快速进行一般查询。另外,顺序实际上是一个字符串,例如:1234567A或1234567A。你真的在问变量吗?或者您想了解更多关于where子句中的别名列的信息?where子句中的别名列更多。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们只有6位数字时,查询工作正常,但现在我们有7位数字,我遇到了一个错误,我正试图以不同的方式重写查询。这正是我所需要的。感谢Kritner.+1能够看穿OP节目的秘密。