我想在我的mssql存储过程中使用一个参数来在小的和详细的结果之间切换(出于可维护性,性能和网络负载的原因).
如果参数设置为1,我将获得所有列,否则只有一个或两个最重要的列.它的工作方式非常有限:
ALTER PROCEDURE [dbo].[GetAllUsers]
@detail BIT
AS
IF @detail = 1 SELECT UserName, Title, UserID FROM Users
ELSE SELECT Username FROM Users
Run Code Online (Sandbox Code Playgroud)
但我想使用合并的WHEN子句.以下是我尝试过的,但这不起作用.
ALTER PROCEDURE [dbo].[GetAllUsers]
@detail BIT
AS
CASE @detail
WHEN 1 THEN SELECT UserName, Title, UserID
ELSE SELECT UserName END
FROM Users
WHERE UserID < 5
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这样的事情?
鉴于:
以下Select语句:
select case NULL
when NULL then 0
else 1
end
Run Code Online (Sandbox Code Playgroud)
问题:
我希望这会返回0,但它返回1.什么给出?
我最初将此代码编写为一系列if语句,但在了解了更多关于Ruby的决定之后,决定一个case语句可能更合适.然而,现在它似乎被打破了,我不知道为什么.
location = gets.chomp.downcase
case location
when 'v' || 'vaca'
file1, file2 = 'vMasterLocation.csv', 'vMasterSR.csv'
when 'c' || 'comm'
file1, file2 = 'cMasterLocation.csv', 'cMasterSR.csv'
else
puts "Not a valid location."
exit
end
Run Code Online (Sandbox Code Playgroud)
声明运行正常时location的输入或者是V,v,C,或c,但每当我试着输入vaca或comm红宝石返回以下内容:csv.rb:1335:in 'initialize': can't convert nil into String (TypeError)
我使用||不正确或者我误解了案例陈述吗?任何反馈都非常感谢.谢谢!
这里它的形式if仅作为参考:
location = gets.chomp.downcase
if location == 'v' || location == 'vaca'
file1, file2 = 'vMasterLocation.csv', …Run Code Online (Sandbox Code Playgroud) WHERE CONDITION1='ABC'
AND Status =
CASE @Option
WHEN 1 THEN 'True'
WHEN 2 THEN 'False'
WHEN 3 THEN NULL
WHEn 4 THEN **IN ('True', 'False', NULL)**
END
Run Code Online (Sandbox Code Playgroud)
如何编写查询,我的第一个选项直接匹配,= 但我的最后一个选项需要一个IN
上面的查询给出了错误,但我想要类似的东西,我无法找到.
有什么方法可以检索 case 语句中的选项列表?例如,如果我有这个代码:
tool=$1
case ${tool} in
brdf)
# Do stuff
;;
drift)
# Do other stuff
;;
*)
echo "ERROR: I don't know this tool. Valid options are: brdf, drift"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
这很容易阅读,但是在从列表中添加/删除工具时,错误消息很容易过时,因为我还需要记住更改那里的名称。
使用这样的数组可以避免重复:
tool=$1
validtools=(brdf drift)
case ${tool} in
${validtools[0]})
# Do stuff
;;
${validtools[1]})
# Do other stuff
;;
*)
echo "ERROR: I don't know this tool. Valid options are: ${validtools[@]}"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
但这读起来非常糟糕,无论如何,使用硬编码的数组索引来维护会更糟。
有没有一种好的方法可以做到这一点,也许是一些检索可用选项列表的变量或命令,或者我是否只需要记住在添加新选项时更新错误消息?
所以我不确定我想要的是否实际上是一个可变变量,但它与它相似.
我基本上想要这样做:
case thing of
True -> p <- func
False -> p <- otherFunc
return Record {program=p, otherFields=oF}
Run Code Online (Sandbox Code Playgroud)
我有什么方法可以做那样的事情?我已经让我的函数返回一个IO记录,所以尝试将返回放在case语句中,但是我的最后一行需要返回它,但事实并非如此.
SQL Server 2000中是否可以使用以下命令?
CREATE FUNCTION getItemType (@code varchar(18))
RETURNS int
AS
BEGIN
Declare @Type tinyint
Select @Type = case len(@code)
WHEN 12,14,17 THEN 1
WHEN 13,15,18 THEN 2
WHEN 8,10 THEN 3
ELSE 0
END
RETURN (@Type)
END
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在调用一个返回数组的函数,但我遇到了这个错误:在写上下文中不能使用函数返回值
很多人都会遇到这个错误,但我看不出我做错了什么.
这是功能:
function select_image_styles_from_category($category)
{
$image_details();
switch($category)
{
case 'twine':
$image_details[0] = get_bloginfo('template_directory') . '/images/titles/blog-twine.png';
$image_details[1] = 'on-top';
break;
case 'scrapbook':
$image_details[0] = get_bloginfo('template_directory') . '/images/blog/papers.png';
$image_details[1] = 'on-top';
break;
default:
$image_details[0] = 'stuff';
$image_details[1] = 'things';
}
return $image_details;
}
Run Code Online (Sandbox Code Playgroud)
然后我从另一个函数调用这个函数,这就是它出错的行(这个函数还有更多,但它对于问题的其余部分来说是多余的):
function add_img_styles_to_special_categories($the_content_string, $category)
{
//erroring line
$image_details() = select_image_styles_from_category($category);
}
Run Code Online (Sandbox Code Playgroud)
我错过了演员吗?我需要显式构造一个数组吗?我是否提出了案件陈述?我真的看不出我错过了什么.你们这些华丽的小伙子有什么指针吗?
不知何故,我的switch语句没有通过我的任何案例,但它不应该进入一个?(我使用/sf/answers/281048701/作为参考).
没有输出,应用程序被阻止后.
#include <stdio.h>
#include <stdlib.h>
#define BADKEY -1
#define string1 1
#define string2 2
#define string3 3
#define string4 4
char *x = "string1";
typedef struct {char *key; int val; } t_symstruct;
static t_symstruct lookuptable[] = {
{ "string1", string1 }, { "string2", string2 }, { "string3", string3 }, { "string4", string4 }
};
#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))
int keyfromstring(char *key) {
int i;
for (i=0; i < NKEYS; i++) {
t_symstruct *sym = lookuptable + i;
printf("before: …Run Code Online (Sandbox Code Playgroud) 是否有任何一般性能指导用于何时使用Case而不是链ElseIf?
请考虑以下示例......
Dim lobjExample As Object = GetARandomDataTypeCrapExample()
If lobjExample Is GetType(Boolean) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(Byte) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(Char) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(Date) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(Decimal) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(String) Then
' Solve world hunger here
ElseIf lobjExample Is GetType(Integer) Then
' Solve world …Run Code Online (Sandbox Code Playgroud) 我正在尝试为DB2创建用户定义的函数,但无法弄清楚.我对t-sql感觉更舒服,这将以十几种方式实现.我需要帮助,因为我收到的所有内容都是神秘的错误消息,告诉我没有有效的令牌或其他类似的令牌.
基本前提是我试图将正常日期转换为整个数据库中使用的日期格式(cyymmdd)这里是伪代码:
Get current time;
If YEAR(current time) > 1999 then 1 else 0;
Run Code Online (Sandbox Code Playgroud)
很简单吧?无法让它发挥作用.这是实际的代码:
DECLARE Cn CHAR ( 1 ) ;
CASE
WHEN YEAR(X) > 1999
THEN SET Cn = 1;
ELSE SET Cn = 0;
Run Code Online (Sandbox Code Playgroud)
还尝试过:
DECLARE Cn CHAR ( 1 ) ;
CASE YEAR(X)
WHEN > 1999
THEN SET Cn = 1;
ELSE SET Cn = 0;
Run Code Online (Sandbox Code Playgroud)
而那应该是悲惨的失败.
我真的不知道如何只用SQL将3/25/2014转换为1140325.我想我可以在应用程序逻辑中处理这个问题,但这不是我想要的方式.
提前致谢.
case-statement ×11
sql ×5
sql-server ×2
bash ×1
c ×1
db2 ×1
function ×1
haskell ×1
ibm-midrange ×1
if-statement ×1
in-clause ×1
mutable ×1
null ×1
performance ×1
php ×1
ruby ×1
select ×1
syntax ×1
vb.net ×1