我正在努力创建一个将从表中返回所有信息的查询(如SELECT *),但我想省略自动增量的列。
原因是,我在网格视图控件中显示所有数据(使用SELECT *,因为我并不总是知道哪些列可用),然后我打开表以允许执行更新。但是,这也会打开被指定为编辑的自动增量的列,并阻止更新查询工作。
到目前为止,我发现'sys.columns.is_identity'表似乎在某种程度上有所帮助,我只是不确定如何使用动态SELECT。 应该注意的是,列并不总是已知,因此我使用SELECT *来检索初始所需数据。
答案 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')