Mar*_*ley 3 t-sql sql-server-2008
场景:包含 100 多个字段的表(不是我做的……我继承了这个) 网站上只需要显示 50 个这些字段 他们希望保留其他 50 个字段以用于历史目的。某些不需要的字段有可能在将来的某个时候成为必需的。
问题:我正在寻找一种方法来轻松识别 50 个必填字段,以便我可以通过查询提取字段名称。
Psuedo Query: Select FieldNames from TableName where Required = Yes
Is there a setting I could change?
What about using Extended Properties?
Run Code Online (Sandbox Code Playgroud)
预先感谢您提供的任何方向。
除非我遗漏了您的问题的细微差别,否则请使用 COLUMNS 的 INFORMATION_SCHEMA 表。此查询标识表 dbo.dummy 中所有需要的列。
SELECT
IC.COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS IC
WHERE
IC.TABLE_SCHEMA = 'dbo'
AND IC.TABLE_NAME = 'dummy'
AND IC.IS_NULLABLE = 'NO'
Run Code Online (Sandbox Code Playgroud)
在进行更多思考之后,也许您想要一个通用查询来获取所有必需的列,然后构建选择查询。此查询涵盖了可能的请求
DECLARE
@hax varchar(max)
, @schemaName sysname
, @tableName sysname
SELECT
@schemaName = 'dbo'
, @tableName = 'dummy'
; WITH A AS
(
-- this query identifies all the columns that are not nullable
SELECT
IC.TABLE_SCHEMA + '.' + IC.TABLE_NAME AS tname
, IC.COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS IC
WHERE
IC.TABLE_SCHEMA = @schemaName
AND IC.TABLE_NAME = @tableName
AND IC.IS_NULLABLE = 'NO'
)
, COLUMN_SELECT (column_list) AS
(
-- this query concatenates all the column names
-- returned by the above
SELECT STUFF((SELECT '], [' + A.Column_Name
FROM A
FOR XML PATH('')),1, 2, '')
)
-- Use the above to build a query string
SELECT DISTINCT
@hax = 'SELECT ' + CS.column_list + '] FROM ' + A.tname
FROM
A
CROSS APPLY
COLUMN_SELECT CS
-- invoke the query
EXECUTE (@hax)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |