1列を除くすべての列を選択できますか?
ここにすべての列名があります:id、name、address、age
SELECT id, name, address from TBLUser
テーブルの列数が互いに異なるため、このselectステートメントは使用しません。
1列を除くすべての列を選択できますか?
ここにすべての列名があります:id、name、address、age
SELECT id, name, address from TBLUser
テーブルの列数が互いに異なるため、このselectステートメントは使用しません。
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)
どうですか:
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]
sql * plusでは、
1つの方法は、次のように無効にすることです。
sql> column age noprint
sql> SELECT * from TBLUser
その後、を使用して元に戻すことができます
sql>column age off
または、DBMS_SQLパッケージを使用して動的にユーザーを使用する必要があります。