如何通过使用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'
答案 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都会重新计算,因此始终与实际的顺序位置相对应(不包括空格)。