sys模式中的序数列位置

时间:2019-03-08 12:27:37

标签: sql-server tsql

如何通过使用SYS模式在视图和表上都获得以下查询?

SELECT c.column_name,c.ordinal_position
from information_schema.columns c
where TABLE_SCHEMA='dbo' 
and table_name='def_transaction_pt'

到目前为止,我已经使用了以下内容,但是我不知道从何处获取顺序列的位置:

select *
from 
    sys.objects o
    inner join sys.columns c on o.object_id=c.object_id
where o.name='def_transaction_pt'

1 个答案:

答案 0 :(得分:2)

您在正确的道路上...

csv_reader = csv.reader(csv_file, quotechar='þ', delimiter='\x14')

注意:我仅加入DECLARE @ObjectName sysname = 'def_transaction_pt', @SchemaName sysname = 'dbo' SELECT c.name As Column_Name, ROW_NUMBER() OVER(ORDER BY c.column_id) As Ordinal_Position FROM sys.columns AS c JOIN sys.objects AS o ON c.object_id = o.object_id JOIN sys.schemas AS s ON o.schema_id = s.schema_id WHERE o.name = @ObjectName AND s.name = @SchemaName 来启用使用架构名称的过滤, 和sys.schemas允许使用表/视图名称进行过滤

在阅读注释和文档后,我决定采纳Larnu关于使用row_number而不是直接使用column_id的建议。 另外,我将sys.objects更改为All_columns,因为它包含表和视图中的列。

顺便说一句,information_schema.Columns的官方文档将Columns描述为“列标识号”。 -可能与Ordinal_Position相同-需要更多测试才能弄清楚该部分。

BTW#2:尽管您不能使用alter table更改列的顺序位置,但可以使用可视设计器(依次删除并重新创建表)进行操作-如果您这样做,所有列的列ID都会重新计算,因此始终与实际的顺序位置相对应(不包括空格)。