我们能在EXEC中使用CASE吗?

9

我希望根据用户的输入选择要执行的存储过程。类似于 -

EXEC
CASE @InputParam 
  WHEN 'XML' THEN GetXMLData @ID, 'y'
  WHEN 'TABLE' THEN GetTableData @ID, 'y'
END

这可以用 CASE 实现吗?还是我应该考虑使用 If 结构?


2
“CASE” 用于查询内的行内评估。你需要使用流程控制构造,“IF”。 - JNK
4个回答

13

你需要在这里使用IF结构:

IF @InputParam = 'XML'
    EXEC GetXMLData @ID, 'y'
IF @InputParam = 'TABLE'
    EXEC GetTableData @ID, 'y'

3
在这种情况下,即使SQL Server允许这样做,使用IF语句也更加清晰。
IF @InputParam = 'XML'
BEGIN
    exec GetXMLData @ID, 'y'
END
ELSE IF @InputParam = 'TABLE'
BEGIN
    exec GetTableData @ID, 'y'
END

1
你可以这样做:
IF @InputParam = 'XML'
BEGIN
   EXEC GetXMLData @ID, 'y'
END

IF @InputParam = 'TABLE'
BEGIN
   EXEC GetTableData @ID, 'y'
END

我认为你应该在这里使用IF而不是CASE...这是无效的语法。 - JNK
是的 @JNK 是正确的,我之前尝试过上面的代码,但它没有起作用。 - neuDev33
@neuDev33 好的,你可以使用 IF。我之前是在使用 Sybase-ASE 语法 :P - aF.

1
你可以使用CASE,但是需要使用EXEC (cmd):
DECLARE 
@cmd VARCHAR(200)
, @InputParam VARCHAR(5) ='TABLE'
, @ID INT =1

SELECT @cmd = ( CASE @InputParam 
WHEN 'XML' THEN 'GetXMLData '
      +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39)
WHEN 'TABLE' THEN 'GetTableData '
      +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39)
END)
EXEC(@cmd)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接