在SQL Server 2005中,使所有字符字段nvarchar(MAX)而不是明确指定长度是否有任何缺点,例如nvarchar(255)?(除了显而易见的一个,你无法限制数据库级别的字段长度)
给出SQL Server 2005中的下表:
ID Col1 Col2 Col3
-- ---- ---- ----
1 3 34 76
2 32 976 24
3 7 235 3
4 245 1 792
Run Code Online (Sandbox Code Playgroud)
编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的列)?
ID Col1 Col2 Col3 TheMin
-- ---- ---- ---- ------
1 3 34 76 3
2 32 976 24 24
3 7 235 3 3
4 245 1 792 1
Run Code Online (Sandbox Code Playgroud)
更新:
为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".
我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.
无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:
with cte (ID, Col1, Col2, Col3)
as
(
select ID, …Run Code Online (Sandbox Code Playgroud) 我GetPixel()在.NET应用程序中使用gdi32.dll来在屏幕上的任何位置采样像素的颜色.它工作正常,但它对我来说是一个主要的性能瓶颈.
有更快的方法吗?
Linq to SQL ROW_NUMBER()用于分页目的,即当你使用Skip()和Take()时.
但是,我似乎无法ROW_NUMBER()在查询中找到实际访问值的方法.我需要在查询中找到记录的ROW_NUMBER()(不带回所有记录).
我在T-SQL和Linq to Objects中成功完成了这项工作,但Linq to SQL解决方案难以实现.
在Linq to Objects中我可以得到如下行号:
var rowTarget =
mainQuery
.Select((obj, index) => new { obj.ID, Index = index })
.SingleOrDefault(x => x.ID == targetID);
// rowTarget.Index is the answer
Run Code Online (Sandbox Code Playgroud)
但Linq to SQL不支持Select()使用索引参数的覆盖(这是有道理的,实际上 - ROW_NUMBER()只有在使用Skip()和Take()时才会使用).
我似乎找不到一个不会导致从数据库返回所有记录的解决方案.
这甚至可能吗?
对于我的WCF服务,我已经实现了IAuthorizationPolicy并将其连接起来(并且可以确认它正在被使用).
在Evaluate()方法中,我设置了一个自定义主体,如下所示:
evaluationContext.Properties["Principal"] = myCustomPrincipal;
Run Code Online (Sandbox Code Playgroud)
但是,当调用服务时,Thread.CurrentPrincipal是GenericPrincipal!
我的服务行为配置如下:
<serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="MyNamespace.MyPrincipalAuthorizationPolicy, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</authorizationPolicies>
</serviceAuthorization>
Run Code Online (Sandbox Code Playgroud)
我试图使用反射器来查看发生了什么,但没有看到任何有用的东西.
我做错了吗?我缺少一些配置吗?
我有一个需要在整个地方重用的查询,我需要改变哪个属性/列用于连接.
我希望能做的是:
query = RestrictByProp(query, x=>x.ID);
Run Code Online (Sandbox Code Playgroud)
极其简化的RestrictByProp()可能是*:
private static IQueryable<Role> RestrictByProp(IQueryable<Role> query,
Func<Role, int> selector)
{
return query.Where(x => selector(x) == 1);
}
Run Code Online (Sandbox Code Playgroud)
问题是即使这个简单的实现也会导致运行时异常:
Method 'System.Object DynamicInvoke(System.Object[])' has no
supported translation to SQL.
Run Code Online (Sandbox Code Playgroud)
**(这里我只是添加一个简单的'where'子句 - 在我的实际代码中,我将使用lambda来选择要用于连接的属性.)*
我发现这很奇怪,因为如果成员访问lambda是内联完成的,那很好:
private static IQueryable<Role> RestrictByID(IQueryable<Role> query)
{
return query.Where(x=> x.ID == 1);
}
Run Code Online (Sandbox Code Playgroud)
LINQ to SQL也很高兴,如果你传入一个Expression<Func<Role, bool>>(即参数是x=>x.ID == 1),但是这会使对象失败,因为我需要在查询中确定右手操作数的值.
有没有办法以某种方式mged lambda表达式,RestrictByProp()以便LINQ to SQL知道如何生成SQL?
我需要编写从FTP位置获取PGP加密文件并处理它们的代码.这些文件将使用我的公钥加密(不是我还有一个).显然,我需要一个可以在Microsoft Access中使用的PGP库.你能推荐一款易于使用的产品吗?
我正在寻找一些不需要大量PKI知识的东西.理想情况下,可以轻松生成一次性私钥/公钥对,然后有一个简单的解密例程.
我有Windows Identity Foundation与MVC 3配合良好.但是,在MVC 4中,似乎WIF没有机会处理未授权的响应并重定向到STS - 而是我被重定向到login.aspx,这是很好的老表格认证.
在MVC 3中,我曾经在web.config中禁用表单auth,但它在MVC 4中不起作用.
我知道MVC 4中的身份验证和授权已经发生了变化,但是我的Google技能似乎已经让我感到厌烦,而且我似乎无法找到如何阻止表单身份验证干扰.有什么指针吗?
.net ×3
c# ×3
linq-to-sql ×2
sql ×2
sql-server ×2
asp.net-mvc ×1
encryption ×1
gdi ×1
gdi+ ×1
linq ×1
min ×1
ms-access ×1
pgp ×1
security ×1
t-sql ×1
wcf ×1
wcf-security ×1
wif ×1
winapi ×1
windows ×1