小编Evi*_*lDr的帖子

从两个表中删除"等效"数据

我需要在SQL Server 2012过程中执行以下伪逻辑,基于表变量和声明为这样的表:

DECLARE @tmp TABLE
    (
    ID int IDENTITY(1,1),
    UserID int NOT NULL,
    SgsID int NOT NULL
    )

CREATE TABLE #Table1
    (
    ID int IDENTITY(1,1),
    UserID int NOT NULL,
    SgsID int NOT NULL
    )
Run Code Online (Sandbox Code Playgroud)
  1. 对于表变量中的每一行数据 @tmp
  2. 删除行Table1,其中UserID/SgsID组合匹配UserID/SgsIDTable1
  3. UserID/SgsID@tmp已删除的组合中删除这些组合Table1

我一直在研究不同的方法,比如使用OUTPUT INTOINTERSECT,但是不能编写一个删除两个表的查询(实际上我认为它甚至不可能).

我已经通过使用以下代码实现了上述步骤,但是,我想知道是否有任何T-SQL专业人员可以建议更简洁/有效的方法?

有关在线版本,请参见SQLFiddle

CREATE TABLE #Table1
    (
    ID int IDENTITY(1,1),
    UserID int NOT NULL,
    SgsID int NOT NULL
    )

INSERT INTO #Table1 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2012

5
推荐指数
1
解决办法
253
查看次数

用Javascript/JQuery中的<a href>标签替换[url]标签

我正在尝试使用JQuery来实现以下逻辑:

  • 替换的字符串值[url="http://www.google.com"]Google[/url]<a href="http://www.google.com">Google</a>

请参阅下面的HTML页面.问题是,按下按钮时,只会粘贴原始文本,并且不会进行RegEx替换.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test</title>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
        //<![CDATA[
        function processJs() {
            var oldtext = $("#oldtext").html();
            var newtext = oldtext.replace('\[url\s?=\s?"?(.*?)"?\](.*?)\[\/url\]', '<a href="$1">$2</a>');
            $('#mydiv').html(newtext);
        }
        //]]>
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div id="oldtext">
            Try this funky new search engine:
            [url="http://www.google.com"]Google[/url]
            Or this older one from back in the day:
            [url="http://uk.altavista.com"]AltaVista[/url]
        </div>
        <div>
            <input type="button" id="btn" value="Replace" onclick="processJs(); return false;" />
        </div>
        <div id="mydiv" style="background-color: #eeeeee; border: 2px inset #aaaaaa"> …
Run Code Online (Sandbox Code Playgroud)

javascript regex jquery

5
推荐指数
1
解决办法
1215
查看次数

在两个结果集中查找"缺失"行

几天来我一直在苦苦挣扎,如果我过度混淆了事情,那么道歉......

我有一系列表定义:

  1. 各种技能
  2. 技能
  3. 上述群体中的技能(多对多)
  4. 工作角色
  5. 这些工作角色的技能(多对多)

数据库的结构如下所示: 架构

我需要创建一个显示以下数据的结果集:

对于所有工作角色,显示这些工作角色中的所有技能.但是,还包括各个组中未包含在每个角色中的技能(用NULL或任何其他方法表示).

请参阅此工作代码以创建表和数据. SQL Fiddle
Apologies的长度,我做了很多插入来创建一个现实的例子.

请注意,该PowerPoint技能未添加到HR Manager角色中,但会添加来自同一组的其他技能.另请注意,该Recruitment Policy技能未添加到Software Manager角色中,但我不需要看到此差距,因为该角色中不存在该组中的其他技能.

我想要的结果将类似于此(为简洁起见,不包括超级明星角色):

RoleTitle               GroupTitle                 SkillTitle               SkillIsInRole
----------------------- -------------------------- --------------------------------------
Software Manager        Microsoft Office           Excel                    1
Software Manager        Microsoft Office           Word                     1
Software Manager        Microsoft Office           PowerPoint               1
Software Manager        Microsoft SQL Server       Query Design             1
Software Manager        Microsoft SQL Server       Stored Procedures        1
Software Manager        Microsoft SQL Server       Failover Clustering      1
HR Manager …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2012

5
推荐指数
1
解决办法
101
查看次数

授予适当的权限以在存储过程中使用对称密钥

我使用以下代码在SQL2012中创建了一个对称密钥(以Windows Admin用户身份登录):

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '34trg45trgf546t';
CREATE CERTIFICATE SSCert01 WITH SUBJECT = 'SS Certificate 01';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE SSCert01;
Run Code Online (Sandbox Code Playgroud)

完成后,我将加密应用于某些数据库列.仍以管理员身份登录,我可以使用密钥成功解密列:

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE SSCert01;
SELECT
    name,
    surname,
    CONVERT(nvarchar(50),DECRYPTBYKEY(PasswordEnc)) as DecryptedPassword
FROM
    [tbl_Users];
CLOSE SYMMETRIC KEY SSN_Key_01;
Run Code Online (Sandbox Code Playgroud)

然后我将上面的代码放入存储过程中.问题是我的应用程序使用两个角色访问SQL,访问相应的proc.当这两个角色中的任何一个尝试执行包含上述代码的proc时,我看到此错误:

找不到证书'SSCert01',因为它不存在或您没有权限.密钥"SSN_Key_01"未打开.请在使用前打开钥匙.

当我以任一角色登录时,他们无法看到密钥或证书.因此,任何人都可以建议授予角色的WHICH权限,以便他们可以在存储过程(仅)中使用密钥/证书来加密/解密数据.除了加密/解密之外,不应允许角色使用密钥/证书执行任何功能.我看过MSDN /谷歌并没有更聪明.

更新 以下代码允许角色使用proc,但我担心CONTROL访问太多.有人可以提供一些清晰度吗?

GRANT CONTROL ON CERTIFICATE :: SSCert01 TO Role001;
GRANT CONTROL ON SYMMETRIC KEY :: SSN_Key_01 TO Role001;
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2012

5
推荐指数
1
解决办法
8605
查看次数

使用INDEX MATCH查找大于/等于值

我一直在网上和Excel帮助中搜索,但无法找到这是否可行.

给定一个数字,值和搜索项列表,我需要找到值大于或等于搜索项的值.看例子:

Excel索引匹配示例

Excel返回红色但它应返回橙色,因为15大于10.
其他所需的结果示例如下:

  • 5 =红色(或N/A)
  • 25 =黄色
  • 63 =紫罗兰
  • 15434 =紫罗兰(或N/A)

我意识到如果我按降序对列表进行排序并-1用于MATCH [match_type]参数,那么它的工作正常,但是,列表超过1,000行,并且更容易按升序读取.

excel excel-2013

5
推荐指数
1
解决办法
4万
查看次数

自定义OWIN/Katana UserManager工厂行为

有很多样本在线使用OWIN/Katana根据用户名/密码组合在数据库中查找用户并生成索赔主体,例如...

var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
// generate claims here...
Run Code Online (Sandbox Code Playgroud)

如果您正在创建一个新的应用程序并希望实体框架执行脏工作,那就没问题.但是,我有一个八年历史的单片网站刚刚更新,使用基于声明的身份验证.我们的数据库命中是通过DAL/SQL手动完成的,然后从那里生成ClaimsIdentity.

有些人建议OWIN比我们的手动方法更容易使用,但我想从那些使用它的人那里得到一些输入.

是否可以根据凭据更改UserManager工厂查找用户的方式?或者,我错过了另一种方法吗?我在网上找到的所有样本似乎都使用样板方法让Entity Framework创建数据库并管理搜索.

asp.net entity-framework owin katana asp.net-identity

5
推荐指数
1
解决办法
5095
查看次数

使用OnValidateIdentity对cookie数据执行其他验证

Brock Allen的博客中,他表示

CookieAuthenticationOptions类具有Provider属性...并且它具有您可以订阅的委托的属性.这允许您在进入应用程序时验证cookie(OnValidateIdentity).在此回调中,您可以拒绝或替换身份.

我是OWIN和C#的新手,所以我正在努力调整OnValidateIdentity我在网上发现的许多例子以满足我的需求.在每个"私人"网页上接受cookie有效后,我想检查以下内容:

  1. 该cookie包含至少一个声明
  2. CustomerId声明值大于零

我可以用普通方法实现这两个检查,但我无法弄清楚如何挂钩登录OnValidateIdentity.这是我到目前为止所拥有的:

我写了一些代码,但无法弄清楚需要从使用的方法返回什么.

public void Configuration(IAppBuilder app)
{
    dynamic cookieExpirationPeriod = TimeSpan.FromMinutes(60);

    CookieAuthenticationProvider prov = new CookieAuthenticationProvider();
    prov.OnValidateIdentity = ctx =>
    {
        MyClaimsIdentityObject si = MyApp.Identity.Current();
        if (si == null || si.UserId == 0 || si.CustomerId == 0) {
            ctx.RejectIdentity();
            // what needs to happen here for a return value?
        }
    };


    CookieAuthenticationOptions coa = new CookieAuthenticationOptions {
        AuthenticationMode = AuthenticationMode.Active,
        CookieName = "MyApp",
        ExpireTimeSpan = cookieExpirationPeriod,
        SlidingExpiration = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net owin katana

5
推荐指数
1
解决办法
4198
查看次数

ASP.Net MVC 路由捕获所有 *.aspx 请求

一定是以前被问过的,但是在阅读了这里这里这里这里之后,我无法推断相关部分以使其工作。我正在将一个旧的 Web 表单网站改造成 MVC,并希望捕获特定的传入 HTTP 请求,以便我可以发出RedirectPermanent(以保护我们的 Google 排名并避免用户因 404 问题而离开)。

我不需要拦截所有传入请求或解析某些id值,而是需要拦截以.aspx文件扩展名结尾(或包含)的所有请求,例如

www.sample.com/default.aspx
www.sample.com/somedir/file.aspx
www.sample.com/somedir/file.aspx?foo=bar
Run Code Online (Sandbox Code Playgroud)

对 MVC 路由的请求应被忽略(只是正常处理)。

这是我到目前为止所拥有的,除了ASPXFiles路线从未被击中。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // never generates a match
        routes.MapRoute(
            name: "ASPXFiles",
            url: "*.aspx",
            defaults: new { controller = "ASPXFiles", action = "Index" }
        );

        // Used to process all other requests (works fine)
        routes.MapRoute( …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

5
推荐指数
1
解决办法
3741
查看次数

如何在 ASP.NET Core 中保持对象存活?

我有一个 .NET Core MVC 应用程序 (C#),它使用 C++ 库 (SWIG)。在 C# 中,我需要创建其中一个类的实例,预设其回调并在服务器运行时保持其活动状态。使用此回调我从 C++ 获取数据。我尝试将对象存储在会话中,但我只能在那里存储值:

HttpContext.Session.Set(key, value);
Run Code Online (Sandbox Code Playgroud)

还尝试在 上定义它Startup,但该对象在初始化后被释放。在这种情况下最好的解决方案是什么?

注意:在回调函数中,我使用 SignalR 发布数据。

c# signalr asp.net-core-mvc

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

删除基于日期的时间线内连续重复的值

我有一个包含基于日期的用户操作的表。该表用作事件的时间表。以下示例显示了两个人如何随着时间的推移改变其工作角色:

DECLARE @tbl TABLE (
    UserID int,
    ActionID int,
    ActionDesc nvarchar(50),
    ActionDate datetime
);
INSERT INTO @tbl (UserID, ActionID, ActionDesc, ActionDate)
VALUES 
    -- First person
    (1, 200, 'Promoted',   '2000-01-01'),   
    (1, 200, 'Promoted',   '2001-01-01'),   
    (1, 200, 'Promoted',   '2002-02-01'),   
    (1, 300, 'Moved',      '2004-03-01'),   
    (1, 200, 'Promoted',   '2005-03-01'),   
    (1, 200, 'Promoted',   '2006-03-01'),
    -- Second person
    (2, 200, 'Promoted',   '2006-01-01'),   
    (2, 300, 'Moved',      '2007-01-01'),
    (2, 200, 'Promoted',   '2008-01-01');

SELECT * FROM @tbl ORDER BY UserID, ActionDate DESC;
Run Code Online (Sandbox Code Playgroud)

这给出了以下内容,首先显示为最近的事件:

在此输入图像描述

我需要以相反的日期顺序显示表格,但根据 [UserID/ActionID] 匹配删除刚刚发生后立即发生的任何事件。例如,如果某人被晋升,然后再次晋升,则第二次晋升将不会包含在结果中,因为它会被视为与前一个操作重复。

因此,期望的输出是:

在此输入图像描述

经过研究,我试图ROW_NUMBER() …

t-sql sql-server sql-server-2012

5
推荐指数
1
解决办法
100
查看次数