我们可以将CASE与EXEC一起使用吗?



我想根据用户输入选择要执行的存储过程。像——

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

这可以通过CASE完成,还是我应该考虑使用 If 结构?

你想在这里使用 IF 结构:

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

在这种情况下,我认为即使SQL Server允许这样做,IF也会更清晰。

IF @InputParam = 'XML'
BEGIN
    exec GetXMLData @ID, 'y'
END
ELSE IF @InputParam = 'TABLE'
BEGIN
    exec GetTableData @ID, 'y'
END
你可以

这样做:

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

你可以使用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)

最新更新