将条件放入JOIN子句与WHERE子句之间是否存在差异(性能,最佳实践等)?
例如...
-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'
-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪个(也许是为什么)?
有人可以确定T-SQL 之间SET和之间的功能/性能差异(如果有的话)SELECT吗?我应该在什么条件下选择一个?
更新:
感谢所有回复的人.正如一些人所指出的那样,Narayana Vyas Kondreddi的这篇文章有很多好消息.我也仔细阅读网上阅读文章之后,发现这个被精简版瑞安法利它提供了亮点,以为我会分享:
我正在寻找一种流畅的方法来确定一个数字是否在指定的范围内.我当前的代码看起来像这样:
int x = 500; // Could be any number
if ( ( x > 4199 && x < 6800 ) ||
( x > 6999 && x < 8200 ) ||
( x > 9999 && x < 10100 ) ||
( x > 10999 && x < 11100 ) ||
( x > 11999 && x < 12100 ) )
{
// More awesome code
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
我的问题是关于安全访问WCF服务的最佳(也称为"最不痛苦")方式,该服务仅暴露给我们公司的内部用户.目标是确保只通过我们每个用户安装的单个Windows窗体应用程序访问该服务.调用该服务时,我希望该服务能够验证它是否已从允许的应用程序中调用.
要保护的服务使用basicHttpBinding,它支持流式传输,因此我相信我仅限于传输级安全性.
以下是我服务的配置文件中的部分<bindings>和<services>部分的简化版本.
<bindings>
<basicHttpBinding>
<binding name="Service1Binding" transferMode="Streamed"/>
</basicHttpBinding>
</bindings>
<services>
<service name="WCFServiceSecurity.Service1"
behaviorConfiguration="WCFServiceSecurity.Service1Behavior">
<endpoint address=""
binding="basicHttpBinding"
contract="WCFServiceSecurity.IService1"
bindingConfiguration="Service1Binding"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一些细节,说明为了实现此服务的安全性我需要采取什么行动?
注意:我是WCF的新手并且根本不熟悉安全性,所以如果我没有提供足够的详细信息,请告诉我.
正如marc_s所建议的那样,我想使用某种用户名/密码机制来保护WCF服务.这为答案提供了更多的方向,但我仍然有点模糊如何实际做到这一点.
因为我的服务需要启用流媒体,所以我必须使用basicHttpBinding和传输级安全性(对吗?); 此外,我的服务中包含的方法只能接受Stream对象.
考虑到这些限制以及我使用用户名/密码验证的偏好...
在解释了我一直在为我的老板提供这项服务所遇到的麻烦之后,我获准尝试Windows身份验证路由.可悲的是,我没有幸运用我的流媒体服务(argh)实现这种类型的身份验证.进行适当的更改后(如概述这里 -唯一的例外是我的transferMode="Streamed")和访问我的服务,我提交了以下错误:
HTTP请求流不能与HTTP身份验证结合使用.禁用请求流或指定匿名HTTP身份验证.
然后我偶然发现了以下引用,这提供了一些澄清:
你不能做运输认证.与流媒体.如果必须使用HTTP请求流,则必须在没有安全性的情况下运行.
安全的工作方式是:
WCF客户端向服务器发出http请求.
服务器回答说:"你没有被授权,给我发一个基本/摘要/等证书."
客户端获取该响应并使用所附的凭据重新发送其消息.
现在,服务器获取消息,验证凭据,然后继续.请求Streaming不适用于该安全模式.如果确实如此,它会非常慢,因为客户端会发送整个流,从服务器获取未经授权的消息,然后它必须使用凭据重新发送整个流.
所以现在我正在寻找意见,您如何保护启用流媒体的WCF服务?如前所述,某种用户名/密码机制将是首选.在这个盒子外面随意思考......
非常感谢任何帮助!
我有一个包含60个DateTime对象的列表(按升序排序),需要验证每个日期比列表中的前一个日期大1个月.
例如,以下日期列表将有效,因为它们会增加一个月而不会丢失:
Jan-2009
Feb-2009
Mar-2009
Apr-2009
但是,以下日期列表无效,因为2009年2月缺失:
Jan-2009
Mar-2009
Apr-2009
这一天无所谓,只考虑月份和年份.
这样做有效/漂亮吗?
performance ×3
c# ×2
compare ×1
date ×1
linq ×1
range ×1
sql ×1
t-sql ×1
wcf ×1
wcf-security ×1