11

重複の可能性:
SQLはSELECT *[columnAを除く]FROMtableAを使用して列を除外しますか?

1列を除くすべての列を選択できますか?

ここにすべての列名があります:id、name、address、age

SELECT id, name, address from TBLUser

テーブルの列数が互いに異なるため、このselectステートメントは使用しません。

4

3 に答える 3

5
declare @cols varchar(max), @sql varchar(max)
SELECT  @cols = STUFF
    (
        ( 
            SELECT DISTINCT '], [' + name
            FROM sys.columns
            where object_id = (
                select top 1 object_id from sys.objects
                where name = 'TBLUser'
            )
            and name not in ('age')
            FOR XML PATH('')
        ), 1, 2, ''
    ) + ']'
select @sql = 'select ' + @cols + ' from TBLUser'  
exec (@sql)
于 2013-01-18T04:28:48.463 に答える
2

どうですか:

SELECT * FROM sys.columns 
WHERE Name <> N'Column To Exclude' and Object_ID = Object_ID(N'TBLUser')

これにより、除外する列を除くすべての列が返されます。

拡張された説明:

SQLチートシートからのこの説明によると

sys.columnsはシステムテーブルであり、データベース内の列に関する情報を維持するために使用されます。データベースに追加された列ごとに、sys.columnsテーブルにレコードが作成されます。各列に1つのレコードのみがあります

名前:列の名前。これは、テーブルオブジェクト内で一意です。

Object_id:object_idは、列が存在するテーブルの一意の識別子です。この列を使用して、sys.columnsをsys.tablesと結合し、異なるテーブルの列をフェッチします。

名前が指定したものと等しくないsys.columnsからすべての結果を選択'Column To Exclude'し、列名に置き換えます。また、object_idが指定したobject_idと等しいことも要求されます。object_idは、1つの列を除外するテーブルを表す数値です。このopsの場合、テーブルはTBLUserでした。他の用途では、次のようになります。独自のテーブル名object_id(N'[dbo].[YourTable]')に置き換えます。[YourTable]

于 2013-01-18T04:03:56.217 に答える
1

sql * plusでは、

1つの方法は、次のように無効にすることです。

sql> column age noprint
sql> SELECT * from TBLUser

その後、を使用して元に戻すことができます

sql>column age off

または、DBMS_SQLパッケージを使用して動的にユーザーを使用する必要があります。

于 2013-01-18T04:23:42.880 に答える