我想根據用戶輸入選擇要執行的存儲過程。喜歡的東西 -我們可以使用CASE和EXEC
EXEC
CASE @InputParam
WHEN 'XML' THEN GetXMLData @ID, 'y'
WHEN 'TABLE' THEN GetTableData @ID, 'y'
END
可以這樣用CASE
完成,或者我應該考慮使用If
結構?
我想根據用戶輸入選擇要執行的存儲過程。喜歡的東西 -我們可以使用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'
你可以這樣說:
IF @InputParam = 'XML'
BEGIN
EXEC GetXMLData @ID, 'y'
END
IF @InputParam = 'TABLE'
BEGIN
EXEC GetTableData @ID, 'y'
END
在這種情況下,我認爲,即使如果SQL Server允許的是,一個IF會更清晰。
IF @InputParam = 'XML'
BEGIN
exec GetXMLData @ID, 'y'
END
ELSE 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)
'CASE'被用於查詢中的內聯評估。你想要'IF',因爲它是一個流程控制結構。 – JNK 2012-04-13 15:35:32