2

これは、SQL Server で文字列を反復処理する方法に関する以前の質問です。

列名を具体的に選択するにはどうすればよいですか? 列を選択するための私のコードは次のとおりです。

SELECT 'Field '+CAST(ROW_NUMBER() OVER (ORDER BY ordinal_position) AS varchar(5))+': ' + 
COLUMN_NAME
FROM information_schema.columns 
WHERE table_Name = 'SystemDefined' and table_schema = 'schemaAsset'

出力は次のとおりです。

Field 1: Asset_No
Field 2: AssetCategory
Field 3: AssetClassification
Field 4: PurchaseType
Field 5: Department
Field 6: RespPerson
Field 7: Status
Field 8: Location

これは、特定の列名を選択するときに必要な出力です。

Field 1: Asset_No
Field 2: AssetCategory
Field 3: AssetClassification
Field 4: PurchaseType
Field 5: Department
Field 6: RespPerson
Field 7: Status
4

3 に答える 3

3

NOT IN句で使用できる which を使用して、WHERE別の条件を指定するのはどうですか。

SELECT...
FROM..
WHERE  table_Name = 'SystemDefined' AND 
       table_schema = 'schemaAsset' AND
       COLUMN_NAME NOT IN ('Status',....) --  specify the list of names you
                                          -- don't want to show
于 2013-02-27T01:13:33.343 に答える
1

何か不足していない限り、WHERE句を使用して、不要な列を除外できます。

SELECT 'Field '
  + CAST(ROW_NUMBER() OVER (ORDER BY ordinal_position) AS varchar(5))+': ' 
  + COLUMN_NAME
FROM information_schema.columns 
WHERE table_Name = 'SystemDefined' 
  and table_schema = 'schemaAsset'
  and COLUMN_NAME <> 'Location'

複数の列がある場合は、使用できますNOT IN ('Location', 'etc')

于 2013-02-27T01:14:16.477 に答える
0

sys.columns代わりに推奨しますINFORMATION_SCHEMA(理由はここにあります)。

SELECT 'Column ' 
  + CONVERT(VARCHAR(5), ROW_NUMBER() OVER (ORDER BY column_id))
  + ': ' + name
FROM sys.columns
WHERE [object_id] = OBJECT_ID(N'schemaAsset.SystemDefined')
AND name NOT IN ('Location' /* , ... other columns ... */)
ORDER BY column_id; -- because you never know how SQL Server might order
于 2013-02-27T03:05:03.430 に答える