C# 存储过程中的if语句

C# 存储过程中的if语句,c#,sql,C#,Sql,我正在努力找出解决这个问题的最佳方法 我有一个用于大学教学活动的数据库表,该大学有几个正在教学的校区。我试图根据下拉列表显示每个校区的gridview。我必须根据房间更新活动表field CampusOccessed。房间为EMG12、OG114、DS15 如果房间开始于:- 电子校园 奥登校区 D-Donen校区 My idea at the moment is:- For each row in Activites If Room MyString.ToCharArray()[0] =

我正在努力找出解决这个问题的最佳方法

我有一个用于大学教学活动的数据库表,该大学有几个正在教学的校区。我试图根据下拉列表显示每个校区的gridview。我必须根据房间更新活动表field CampusOccessed。房间为EMG12、OG114、DS15

如果房间开始于:-

电子校园
奥登校区
D-Donen校区

My idea at the moment is:- 
For each row in Activites 
If Room MyString.ToCharArray()[0] = E 
Then Update CampusOccurred = Earn 
Else If Room MyString.ToCharArray()[0] = O
Then Update CampusOccurred = Odean 

我可以自己显示下拉列表和gridview来完成剩下的工作,但我不确定进行上述工作的最佳方式。是否可以在SQL中执行If语句?

您可以编写一个SQL查询,执行以下操作:

select . . .,
       (case when left(Room, 1) = 'E' then 'Earn Campus'
             when left(Room, 1) = 'O' then 'Oden Campus'
             when left(Room, 1) = 'D' then 'Donen Compus'
        end) as Campus
如果您通过这种方式从数据库中获取数据,那么工作就完成了


注意:大多数但并非所有数据库都支持
left()
。所有这些都支持等效的函数。

如果我正确理解您的请求,您希望在更新中使用
case
语句:

update Activities
set CampusOccured = case left(Room,1) 
                        when 'E' then 'Earn'
                        when 'O' then 'Oden'
                        when 'D' then 'Donen'
                    end

这与提出的问题有什么关系?我假设您希望在一个存储过程中执行此操作,该存储过程基于您正在使用的dbms的问题titleTag。只有少数dbms产品具有符合ANSI SQL的存储过程。这不是一个特别好的主意。如果他们添加另一个名为“在线校园”的校园,会发生什么?数据模型不好。你应该有一个房间表和一个校园表,一个房间记录将链接到一个校园记录,而不是应用“第一个字符的秘密”。这正是我试图做的,我现在将尝试一下。非常感谢:)@Alexandria很乐意帮忙。请将问题标记为已回答,如果它对您有效。当我尝试运行它时,它会给我一个错误。这就是我所做的。创建过程[dbo]。[CampusOccurrent]作为开始更新活动集Activities.CampusOccurrent=(案例左(房间,1)当'E'时,然后'Earn'当'O'时,然后'Oden'当'D'时,然后'Donen')ENDJust不会运行,就像结尾缺少了什么一样。@Alexandria它缺少
end
对于
case
。尝试以下操作:
CREATE PROCEDURE[dbo].[campusoccurrent]AS BEGIN update Activities set Activities.campusoccurrent=(案例左(1)当'E'时,然后'Earn'当'O'时,然后'Oden'当'D'时,然后'Donen'结束)结束
对不起,我不明白这是怎么回事。我是否在此之后执行update语句。@Alexandria。如果您只需要网格视图中的数据,则
select
就足够了。您不需要实际修改数据。