如何解决从SQL的表/视图中读取多行编写的列名定义
我在column names
中有view
这样的东西。
SELECT
CAST(CONCAT('Trp',f.Production_disposal_Number,p.production_waste_number,p.production_shiftchange_number,t.production_unit_number,pr.process_unit_number,p.production_run_number AS VARCHAR(50)) AS ProductionKey,(SELECT MAX(v.LastModifiedDate) FROM (VALUES (p.LastModifiedDate),(f.LastModifiedDate),(p.LastModifiedDate),(d.LastModifiedDate),(pl.LastModifiedDate),(pr.LastModifiedDate),(t.LastModifiedDate)) AS vtable(LastModifiedDate))
AS LastModifiedDate,CAST(p.Start_Date AS DATETIME2(0)) AS ProductionStartDate,CAST(p.End_Date AS DATETIME2(0)) AS ProductionEndDate
我想通过在column names
程序中通过下面的sql
查询来检索这些C#
query=
"@DECLARE
@olddelim nvarchar(32) = char(13) + Char(10),@newdelim nchar(1) = NCHAR(9999);
SELECT * FROM STRING_SPLIT(REPLACE(OBJECT_DEFinitioN(object_id('sge.vwProduct')),@olddelim,@newdelim),@newdelim);";
using (sqlConnection connection = new sqlConnection(connectionString))
{
sqlCommand command = new sqlCommand(queryString,connection);
connection.open();
sqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
list.Add(reader.GetString(0));
}
finally
{
reader.Close();
connection.Close();
}
}
仅当所有code
都在一行中时,此column names
才能正常运行。但是,如果将单列定义写在多行中,则它将无法读取该column name
。另外,如果在一行中写入了多个列名,那么它也不会读取。
例如,程序无法识别或读取列名LastModifiedDate
,因为它无法识别列定义的开始。并且以同样的方式ProductionStartDate
不会被读取。
我希望所有column names
被正确识别并被程序读取,以免遗漏任何列名。
解决方法
更改查询。您可以轻松地从字典中查询视图的列名。为此,无需“解析” create语句。
SELECT c.name
FROM sys.columns c
INNER JOIN sys.views v
ON c.object_id = v.object_id
INNER JOIN sys.schemas s
ON s.schema_id = v.schema_id
WHERE s.name = 'sge'
AND v.name = 'vwProduct'
ORDER BY c.column_id;
db<>fiddle(具有不同的对象名称;但足以作为演示)
但是请注意,SqlDataReader
是一次性的,因此您应该Dispose()
使用它,或像使用连接那样使用using
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。