【发布时间】:2016-02-11 08:28:04
【问题描述】:
我正在开发一个带有数据库的 MVC 应用程序,其中每个表中都有很多空列。现在,如果用户在表单上动态添加字段,我必须检查哪一列完全为空(可用),然后将其分配给用户添加的字段。
为此,我搜索并找到了以下 SQL 代码,它工作正常。
declare @col varchar(255), @cmd varchar(max)
DECLARE getinfo cursor for
SELECT c.name as colum FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = 'MyTableName'
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT * FROM MyTableName WHERE [' + @col + '] IS NOT NULL) BEGIN print ''' + @col + ''' end'
EXEC(@cmd)
FETCH NEXT FROM getinfo into @col
END
CLOSE getinfo
DEALLOCATE getinfo
它打印给定表中所有空行的所有列。现在我想在我的 MVC 控制器中获取该列表。由于它正在打印结果,所以我不能使用 SqlDataReader。所以我在this question的答案中找到了一个方法。它一一给我结果。
public ActionResult getList()
{
SqlConnection con = DBHelperADO.GetConnection();
SqlCommand cmd = new SqlCommand(query, con); // query = sql code mentioned above
con.Open();
using (con)
{
con.InfoMessage += connection_InfoMessage;
SqlDataReader dr = cmd.ExecuteReader();
}
}
void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
var outputFromStoredProcedure = e.Message;
}
如何从处理程序中填充所有列名的列表? (不能使用会话或静态列表)
我不想在 MVC 应用程序中使用事件处理程序,有没有更好的选择? (可能是任何其他 SQL 代码给我所需的结果或通过其他方法获取 PRINT 输出)
【问题讨论】:
标签: c# sql-server