如果SQL Server CASE值为NULL,则不返回任何内容(To not return anything if SQL Server CASE value is NULL)
我有一个函数根据某些条件返回一列中的多行数据。
ALTER FUNCTION [dbo].[GetFavoriteFruits] ( @FruitId uniqueidentifier ) RETURNS TABLE AS RETURN ( Select Name FROM Fruits WHERE FruitID = @FruitId UNION ALL Select Name FROM Vegetables WHERE VegetableID = @FruitId UNION ALL Select CASE WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists' END UNION ALL Select CASE WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists' END UNION ALL Select CASE WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists' END )
当桌子上有水果和蔬菜的价值时,每件事情都很好。 但是,如果前两种情况的值不存在,则返回的输出(来自最后3个查询)是
NULL NULL NULL
有没有一种方法可以避免这些NULL,并返回类似于前两个查询的任何内容。
I have a function which returns multiple rows of data with one column based on certain conditions.
ALTER FUNCTION [dbo].[GetFavoriteFruits] ( @FruitId uniqueidentifier ) RETURNS TABLE AS RETURN ( Select Name FROM Fruits WHERE FruitID = @FruitId UNION ALL Select Name FROM Vegetables WHERE VegetableID = @FruitId UNION ALL Select CASE WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists' END UNION ALL Select CASE WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists' END UNION ALL Select CASE WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists' END )
When there are values for Fruits and Vegetables in the table, every thing is fine. But if the value for first two cases are not present then the output returned(from last 3 queries) is
NULL NULL NULL
Is there a way I can avoid those NULL and return nothing similar to the first two queries.
原文:https://stackoverflow.com/questions/49058740
更新时间:2022-03-02 07:03
最满意答案
更换:
private TimerTask timerTask = new TimerTask() { @Override public void run() { thangO += 10; textypoo.setText(Integer.toString(thangO)); textypoo.invalidate(); } };
至:
private TimerTask timerTask = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { thangO += 10; textypoo.setText(Integer.toString(thangO)); textypoo.invalidate(); } }); } };
Replace:
private TimerTask timerTask = new TimerTask() { @Override public void run() { thangO += 10; textypoo.setText(Integer.toString(thangO)); textypoo.invalidate(); } };
To:
private TimerTask timerTask = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { thangO += 10; textypoo.setText(Integer.toString(thangO)); textypoo.invalidate(); } }); } };
相关问答
更多-
从Textstream接收数据时的Android TextView文本更新(Android TextView text updation on receiving data from Inputstream)[2023-05-14]
不清楚调用代码的哪个线程,但是你需要确保这两个操作发生在不同的线程上: 流轮询需要在后台线程上完成。 如果您不这样做,那么您没有看到文本,因为read()上的线程阻塞使主线程不会更新UI元素。 setText()方法调用必须在主(UI)线程上进行。 如果你不这样做,文本也不会显示 - 在某些设备上你甚至会看到崩溃。 我假设此代码存在于一个活动中(因为您正在尝试更新UI元素)。 虽然这不是最佳实践 ,但演示该概念的简单示例如下: Thread pollingThread = new Thread() { ... -
尝试这个。 它对我来说很好 (findViewById(R.id.btnchange)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { TextView time = (TextView)findViewById(R.id.Your_Textview_ID); time.set ...
-
更换: private TimerTask timerTask = new TimerTask() { @Override public void run() { thangO += 10; textypoo.setText(Integer.toString(thangO)); textypoo.invalidate(); } }; 至: private TimerTask timerTask = new TimerTask() { ...
-
你只能在UI线程上更新你的UI,把你的setText()方法放在这里面 runOnUiThread(new Runnable() { @Override public void run() { btn.setText(someValue); } }); you can only update your UI on UI thread, put your setText() method inside this runOnUiThread(new Runnable() { ...
-
你的fDateSetListener有: fYear = year; fMonth = monthOfYear; fDay = dayOfMonth; updateStartDisplay(); 和updateStartDisplay()具有: txtTo.setText(new StringBuilder() // Month is 0 based so add 1 .append(tMonth + 1).append("-").append(tDay).append("-") .append(tYea ...
-
TextView无法更新(TextView not updating)[2023-07-04]
因此,您尝试在从getInfoContents()返回后更新视图,并且该视图不能用作实时视图,请参阅此内容 。 可能有用的东西是: status.invalidate(); So you are trying to update the view after it returned from getInfoContents() and that won't work as its not a live view, see this. Something that might work is calling ... -
代替 drawMaze = new DrawMaze(this); 使用 drawMaze = (DrawMaze)findViewById(R.id.relativeLayout2); 但在 setContentView() 原因是当您使用布局设置内容视图时,它使用的是布局中的DrawMaze而不是 drawMaze = new DrawMaze(this); 它已实例化但从未设置到内容视图中 instead of drawMaze = new DrawMaze(this); use draw ...
-
无效不是更新屏幕(Invalidate is not updating screen)[2023-12-02]
我在我的应用程序中遇到了类似的问题。 invalidate()不会重绘形状。 所以我找到的解决方案是将形状提取到显示UI上的组件的类中,然后通过从UI类访问它来从主活动更新组件。 SurfaceView类: @Override public void onDraw(Canvas canvas){ Log.d("check","="+color); Log.e("check","after set:"+buf); Log.i("new view ", " on draw "); ... -
TextView文本未更新(TextView Text Not Updating)[2023-01-30]
您需要在发布消息之间将500毫秒的延迟移动到for循环。 我认为你期望消息一个接一个地顺序执行,但它们没有,这就是你看到最后一个结果的原因。 You need to move the 500 ms delay to your for-loop, between posting of messages. I think you're expecting the messages to execute sequentially one after the other, but they don't, which ... -
您应该重写OnResume并将代码放在那里。 制作resum异步功能,然后使用await。 这将允许UI自行更新。 我没有测试下面的样本,但应该做的工作。 protected async override void OnResume() { base.OnResume(); if (InternetConnectionCheck._InternetIsAvailable (this)) { webServiceClas ...