在 THEN 子句中的 case 语句中将字符串分配给变量

Assigne a string to a variable in a case statement in the THEN clause

这是我的。我试过用引号代替 =,我已经删除了变量并只尝试用引号括起来的 select 语句。失去理智试图弄清楚这一点。 是的,这是家庭作业,我不是要你为我写,只是让我知道为什么我似乎无法让它工作以及我做错了什么。 这个案例大约有 7 时长,但我无法通过第一个。 请帮忙。 我知道人们不喜欢做家庭作业,所以把这看作是教我。谢谢,

CREATE PROC usr_spChooseReport(@ReportNum int)

AS
declare @sqlString nvarchar(500)
SELECT CASE(@ReportNum) 

WHEN 1 THEN @sqlString =''select book.Title, Book_Copies.No_of_Copies,  Library_Branch.BranchName from Book inner join Book_Copies on book.BookID=Book_Copies.BookID inner join Library_Branch on Book_Copies.BranchID=Library_Branch.BranchID where ONVERT(NVARCHAR(MAX),Library_Branch.BranchName) = 'Sharptown' 
and CONVERT(NVARCHAR(MAX), Book.Title) ='The Lost Tribe'''

                  ELSE 'Unknown'  

END

但是如果我尝试这个,

CREATE PROC usr_spChooseReport(@ReportNum int)
AS

SELECT CASE(@ReportNum) 

WHEN 1 THEN (select book.Title, Book_Copies.No_of_Copies, Library_Branch.BranchName from Book inner join Book_Copies on book.BookID=Book_Copies.BookID inner join Library_Branch on Book_Copies.BranchID=Library_Branch.BranchID where CONVERT(NVARCHAR(MAX),Library_Branch.BranchName) = 'Sharptown' 
and CONVERT(NVARCHAR(MAX), Book.Title) ='The Lost Tribe')

                  ELSE 'Unknown'  

END

我收到此错误:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

第二次看了你的问题,我想我明白了。他们希望您使用 case 语句将变量 @sqlString 设置为字符串,即 select 语句。然后在某个时候他们会 EXEC (@sqlString)

其余情况您需要按照您的第一个示例进行操作。

WHEN 2 THEN @sqlString = 'SELECT * FROM Somewhere'
WHEN 3 THEN @sqlString = 'SELECT * FROM SomewhereElse'

第一个示例和第二个示例之间的区别在于,在第一个示例中,它们将字符串值分配给变量@sqlString。在您的第二个示例中,您是 运行 一个 returns 多个表达式的查询。两个完全不同的东西。

首先,这是一个时髦的问题。如果您遵循这种模式,您会对 7 个数字中的每一个进行完全不同的查询吗?

我希望所有的查询都是相同的,只是传递了不同的参数。然后我会像这样创建一个查找 table:

DECLARE @LookUpTable TABLE (ID INT PRIMARY KEY, LibraryBranch VARCHAR(25), Book_Name VARCHAR(25))
INSERT INTO @LookUpTable
VALUES  (1,'Sharptown','The Lost Tribe'),
        (2,'Other Branch','Other book');

DECLARE @ReportNum INT = 1;

select book.Title, Book_Copies.No_of_Copies,  Library_Branch.BranchName 
FROM Book 
inner join Book_Copies 
    on book.BookID=Book_Copies.BookID 
inner join Library_Branch 
    on Book_Copies.BranchID=Library_Branch.BranchID 
inner join @LookUpTable LT
    on Library_Branch.BranchName = LT.LibraryBranch
        AND Book.Title = LT.Book_Name
WHERE LT.ID = @ReportNum

但是如果您确实对每种情况都有不同的查询,那么要么尝试 Jchao 的方法并在最后使用 EXEC(@sqlString),要么您可以使用 if 语句。注意:ELSE IF 意味着它将 运行 只有一个查询,因此一旦找到匹配项,它将 运行 那个查询然后完成,但如果没有找到匹配项,则最后是 ELSE将 运行

DECLARE @ReportNum INT = 1;

IF (@ReportNum = 1)
BEGIN
    SELECT 1 --query 1
END
ELSE IF (@ReportNum = 2)
BEGIN
    SELECT 2 --query 2
END
--etc to 7
ELSE
BEGIN
    SELECT 'Unknown' --query 8 for unknown
END