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

标签 tsql 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?

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

最佳答案

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

在进行更多思考之后,也许您想要一个通用查询来获取所有必需的列,然后构建选择查询。此查询涵盖了可能的请求
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)

关于tsql - 识别表格中必填字段的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261086/

相关文章:

sql - 删除重复行 - 无法找到决定性的答案

sql-server-2008 - 选择值大于 0 的列

sql-server - SQL Server 2008R2问题: "Property Size is not available for Database []..."

sql - 将非标准联接转换为标准联接

c# - MySql数据库中如何调用多个存储过程

sql - 当值基于另一列中的值时,如何将多个 SELECT 语句压缩为一个?

sql-server - 使用 T-SQL 删除字段中的所有撇号

SQL Server - 仅使用 .modify() 合并两个 XML

sql - MSSQL 从 12 列中获取前 4 个值

.net - Login failed for user "xxx"Failed to open the explicitly specified database解决方法