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