【问题标题】:SQL Case statement with Parameter in it带有参数的 SQL Case 语句
【发布时间】:2016-01-20 06:25:16
【问题描述】:
SELECT TOP (1) 
    B.StartDate,
    CASE
        WHEN B.startdate < getdate() THEN 1
        WHEN B.startdate > GETDATE() THEN 2
        ELSE 3
    END AS Status,
    CASE
        WHEN BU.UserID = @UserID THEN 1 
        ELSE 2
    END AS Ownership
FROM 
    TblA AS B  
INNER JOIN 
    TblB AS BF ON B.ID = BF.Id
INNER JOIN 
    TblC AS BU ON B.ID = BU.ID     
WHERE 
    B.Deleted = 'False'
ORDER BY 
    Status, Ownership

我试图在 SQL Server CE 中运行上述查询,但它不允许我在数据表 (xsd) 中声明变量。可见我不能写多个查询,因为它是 CE。那么,鉴于我的情况,有什么解决方法吗?

@UserID - 它一直说参数集合中不存在 - 我认为这是因为我在 CASE 中使用它,这就是它抱怨的原因。

【问题讨论】:

  • 您收到 .NET 错误,但只显示 SQL。请说明您是如何设置查询的(sqlParameter.ParameterName = "@UserID"sqlCommand.Parameters.Item("@UserID ").Value = userId;、...)
  • 不太确定我是否收到您的问题。但我正在尝试在 xsd 中创建一个数据表并在其上创建一个填充方法 - 以返回行。
  • 由于经验不足,这里恐怕帮不上忙。我希望其他人可以。

标签: sql .net-3.5 windows-ce


【解决方案1】:

case语句可以使用变量进行检查。

没有太多的声誉可以评论,只是在这里问 你能提供更多关于你的要求的细节吗?

您是否在此 sql 段之前声明了变量,如果没有,请尝试添加以下内容: 声明@UserID integer= 1 然后再次执行该语句。

【讨论】:

  • 刚刚添加了我尝试保存时出现的实际错误。
  • 我正在尝试在 SQL CE 中执行上述操作,但不允许我在 datatable(xsd) 中声明变量
  • 如果您使用 .net 中的此查询,则可以从代码中替换此变量...
  • 如果您不能在 SQL CE 中声明变量,请使用函数或存储过程,然后您可以将值传递给您的 SQL 案例语句。
  • 如果可行的话,您能否给这个答案投票 1 UP,以便其他用户也可以从这个答案中受益。
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多