1

我有这个从列中检索名称的查询:

SELECT syscolumns.name  
FROM syscolumns 
WHERE sysobjects.name = 'MNT_SCENARIO_EXERCICE' 
order by syscolumns.colId

但它抛出了这个异常:

消息 4104,级别 16,状态 1,行 1
无法绑定多部分标识符“sysobjects.name”。

4

2 回答 2

4

FROM syscolumns WHERE sysobjects.name

如果你从中选择syscolumns你不能参考sysobjects,可以吗?你想要的可能是这样的:

SELECT sc.name 
FROM sys.syscolumns sc
JOIN sys.sysobjects so ON sc.id = so.id
WHERE so.name = 'MNT_SCENARIO_EXERCICE' 
ORDER BY sc.colId;

您也可以OBJECT_ID('...')直接使用来避免加入:

SELECT sc.name 
FROM sys.syscolumns sc
WHERE sc.id = OBJECT_ID('MNT_SCENARIO_EXERCICE')
ORDER BY sc.colId;

是的,所有旧式目录视图都必须由sys模式限定范围。当我们这样做的时候,为什么要从旧的目录视图开始呢?为什么不使用正确的目录视图?

SELECT sc.name 
FROM sys.columns sc
WHERE sc.object_id = OBJECT_ID('MNT_SCENARIO_EXERCICE')
ORDER BY sc.column_id;
于 2013-07-26T10:19:49.773 回答
2

错误是在您的WHERE情况下,您正在查看另一个表,而您没有在FROM子句中选择该表(sysobjects

SELECT sc.name
FROM sysobjects so
INNER JOIN syscolumns sc
  ON so.id = sc.id
WHERE so.NAME = 'MNT_SCENARIO_EXERCICE'

如果要显示表的所有列,则应使用此查询。

于 2013-07-26T10:14:48.800 回答