相关疑难解决方法(0)

T-SQL条件WHERE子句

在这里找到了几个类似的问题,但无法弄清楚如何应用于我的场景.

我的函数有一个名为@IncludeBelow的参数.值为0或1(BIT).

我有这个问题:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为0,我需要查询为:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
AND   p.LocationType = @LocationType -- additional filter to only include level.
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为1,则需要排除最后一行.(即不要应用过滤器).

我猜它需要是一个CASE声明,但无法弄清楚语法.

这是我尝试过的:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server case-statement where-clause

28
推荐指数
2
解决办法
4万
查看次数

为什么参数化查询会产生比非参数化查询慢得多的查询计划

在SQL Server 2005数据库中,我正在处理此查询:

select*
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = 1000

与以下参数化版本相比,它具有非常不同且更快的查询计划.

声明@p0 int
set @ p0 = 1000
select*
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @ p0

在我的特定情况下,具有文字的版本在亚秒时间运行.参数化版本需要2-3秒.我认为它们是相同的,因为它们是相同的查询.

为什么他们会得到不同的查询计划?

有没有办法让参数化版本具有与文字版本相同的性能?

这是查询计划.我的真实查询与上面给出的通用查询有很大不同,但产生这些计划的两个查询之间的唯一区别是参数.为什么用一个参数替换一个文字会产生如此大不相同的计划?

sql-server

22
推荐指数
3
解决办法
8415
查看次数

如何在管理工作室中编写参数化查询?

从客户端应用程序我做了:

select * from table where Name = :Parameter
Run Code Online (Sandbox Code Playgroud)

然后在执行查询之前我做

:Parameter = 'John'
Run Code Online (Sandbox Code Playgroud)

这些参数不是搜索和替换,而是传递给服务器的实际参数.由于我需要详细测试其中的一些查询,如何在管理工作室中编写查询?

我想用参数编写查询并给参数赋值.如何才能做到这一点?

更新:

为了消除这里的混乱,我添加信息以更好地表达myseld.

当我执行正常查询时,我在sql server profiler中看到

select * from table where Name = 'John'
Run Code Online (Sandbox Code Playgroud)

当我执行参数化查询时,我看到:

exec sp_executesql N'select * from table 
where Name = @P1',N'@P1 varchar(8000)','John'
Run Code Online (Sandbox Code Playgroud)

这就是我说它不是搜索和替换的原因.

sql-server parameters ssms

17
推荐指数
2
解决办法
5万
查看次数