场景:包含 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/