c# - 从 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
像连接时那样使用它。
推荐阅读
- powershell - Microsoft Azure Blob 存储更新
- vue-cli - 如何将 `vue ui` 绑定到另一个 IP?(vue-cli 3)
- r - 在R中提取字符串
- makefile - 关于make文件语法理解的初学者问题
- vba - 标记列中给定值的连续值。VBA
- javascript - React Native TypeError:网络请求失败
- python - TypeError: include 和 exclude 必须都是非字符串序列
- xamarin - 构建 MVVMCross
- javascript - 使用js将动态范围分成相等的部分
- java - 用Java对csv文件中的行进行分组