获取所有数据,但省略自动增量的列

时间:2017-01-21 13:28:11

标签: sql asp.net sql-server

我正在努力创建一个将从表中返回所有信息的查询(如SELECT *),但我想省略自动增量的列。

原因是,我在网格视图控件中显示所有数据(使用SELECT *,因为我并不总是知道哪些列可用),然后我打开表以允许执行更新。但是,这也会打开被指定为编辑的自动增量的列,并阻止更新查询工作。

到目前为止,我发现'sys.columns.is_identity'表似乎在某种程度上有所帮助,我只是不确定如何使用动态SELECT。 应该注意的是,列并不总是已知,因此我使用SELECT *来检索初始所需数据。

1 个答案:

答案 0 :(得分:1)

正如您所提到的,只有这样做的方法是使用sys.columns和动态查询

DECLARE @col_list VARCHAR(8000)

SET @col_list = (SELECT ',' + Quotename(c.NAME)
                 FROM   sys.columns c
                        JOIN sys.objects o
                          ON c.object_id = o.object_id
                 WHERE  o.NAME = 'table_name'
                        AND is_identity <> 1
                 ORDER  BY column_id
                 FOR xml path(''))
SET @col_list = Stuff(@col_list, 1, 1, '')

EXEC('select '+@col_list +' from yourtable')