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 に答える