【问题标题】:How to set variable to all in T-SQL?如何在 T-SQL 中将变量设置为全部?
【发布时间】:2021-10-29 19:00:10
【问题描述】:

我仍在学习 SQL,我想知道是否有任何方法可以将变量设置为 all 而不是任何特定值。我想要一些对我有用的东西来进行测试。我知道这就是它的工作原理。

DECLARE @sku AS VARCHAR(30)
SET @sku = 'ProductA'

无论如何我可以将变量中的值保持打开状态。基本上是这样的。

DECLARE @sku AS VARCHAR(30)
SET @sku = '%'

DECLARE @sku AS VARCHAR(30)
SET @sku LIKE '%'

我不确定它在变量中是如何工作的。我试图找到它,但找不到能满足我目的的东西。基本上,我不断将特定值之间的变量值更改为 %。任何建议将不胜感激。

添加:

DECLARE @sku AS VARCHAR(30) = '%'
DECLARE @name AS VARCHAR(40) = '%'

select * from table1 
where sku = @sku 


select * from table2 
where sku = @sku 


select * from table3 
where name = @name

基本上在上面的示例查询中,我必须在 3 个不同的表中注释和取消注释 where 子句。有一种情况,我将值放在顶部的 @sku 中,我可以在 select 语句中使用 where 子句。出于测试目的,我必须注释 where 语句,但为此我需要在 3 个不同的查询中执行此操作。无论如何,如果我可以将过滤器放在顶部而不是评论所有 3 个 where 子句的话。有意义吗?

【问题讨论】:

  • 你想怎么用这个?
  • 你的最终目标是什么?您是否正在尝试基于变量值执行 Begins With 或 Ends With 匹配?
  • 基本上我的目标是,将变量设置为 % 以显示所有变量。它在 where 子句中的工作方式。例如,其中 sku 喜欢 '%'。我可以在变量中做这样的事情吗?
  • “显示所有变量”是什么意思?作为SELECT 返回您拥有DECLAREDd 的所有变量?

标签: tsql set declare


【解决方案1】:

如果您的目标是对参数使用可选的“all”值,您可以这样做:

DECLARE @sku nvarchar(100) = '%'; -- or any other token

...
WHERE @sku IN (field, '%')

计算结果为:如果@sku 为%,则条件始终为真并返回所有行。
对于任何其他值,它只过滤field 等于参数的行。

【讨论】:

  • 完美。这就像一个魅力。无论如何,我们可以用整数做一些事情吗?我必须先将@sku 和字段都转换为整数吗?
  • 其实我明白了。我需要做的就是将两者都转换为 NVARCHAR。再次感谢@KekuSemau 的时间和帮助。欣赏它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2011-10-18
  • 2016-07-19
相关资源
最近更新 更多