mysql - SQL仅在条件下加入?

标签 mysql sql-server-2005

我有大约 10 个不同的 sql 语句来更新不同的表。它们看起来类似于:

Update Y 
SET x = n
Where something = @somevar

现在,当设置了@hasRows var 时,我只需要更新某些行。我可以简单地这样做:

if not @hasRows is null
begin
    Update Y     
    SET x = n
    from Y inner join #items on y.Item = #items.Item
    Where something = @somevar
end
else
begin
    Update Y 
    SET x = n
    Where something = @somevar
end

有没有办法避免 if/else 并在一条语句中进行更新?

我正在使用 SQL2005。

最佳答案

也许是这样的:(复制你的例子)

UPDATE Y     
SET x = n
FROM Y 
WHERE something = @somevar
AND (
    (@Items IS NULL)
    OR (y.Item = @Item)
    )

未使用 JOIN,但如果 @itemsNULL 或使用预期条件,它始终会继续。

这里的问题是您的示例似乎包含一个 TVP @ITEMS 但 TVP 在 SQLServer2k5 中不存在?所以无论值是什么都应该放在参数中。

或者,如果#Table 存在但没有行,您可以这样做:

UPDATE Y     
SET x = n
FROM Y 
JOIN #Items ON (@HasRows = 0) OR (#Items.Item = Y.Item)
WHERE something = @somevar

如果您不知道 #Items IS NULL 是否为 NULL,那么您的条件是您的选择,因为声明的变量在语句执行之前被解析。

关于mysql - SQL仅在条件下加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796407/

相关文章:

PHP MySQLi 准备好的语句不起作用

mysql - 如何从mysql文件中提取内容

.net - SQL Server 2005事务级别和存储过程

sql-server-2005 - 如何从给定数据库中删除前缀为 "bkp"的所有表?

sql - 获取每组的前 1 行

mysql - 如何使用 MySql 数据库替换我的 ROW_NUMBER() 函数?

mysql - 将前导零添加到 MySQL 中的值

java - 使用变量将整数值插入 MySQL 数据库

sql-server-2005 - T-SQL 存储过程 - 动态 AND/OR 运算符

sql-server-2005 - T-SQL,选择一组的第一行