识别表格中必填字段的简单方法

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)

预先感谢您提供的任何方向。

bil*_*nkc 7

除非我遗漏了您的问题的细微差别,否则请使用 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)