簡體   English   中英

SQL的PRINT輸出的替代方法

[英]Alternative of PRINT output from SQL

我正在使用帶有數據庫的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。 所以我找到了解決這個問題的方法 它給我結果一個接一個。

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;
}
  1. 如何從處理程序填充所有列名稱的列表? (不能使用會話或靜態列表)

  2. 我不想在MVC應用中使用事件處理程序,所以還有更好的選擇嗎? (可能是任何其他SQL代碼可以給我所需的結果,也可以通過其他方法獲得PRINT輸出)

根據@AwaisMahmood建議更新

您可以通過臨時表更改打印語句,然后將其返回(我沒有檢查set @cmd ...行中引號的正確正弦值,但您可以理解)

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'

CREATE TABLE #EmptyFields {
    FieldName nvarchar(60)
}

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
 insert into #EmptyFields (FieldName) values (''' + @col + 
'')
' end'
EXEC(@cmd)

FETCH NEXT FROM getinfo into @col
END

CLOSE getinfo
DEALLOCATE getinfo

select * from #EmptyTables

然后,在客戶端中,您可以照常使用數據讀取器來填充List<string>或simmilar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM