小编Jon*_*han的帖子

使用CTE优化时态表

我创建时态表以设置级别:

CREATE TABLE [#DesignLvl]
(
    [DesignKey] INT,
    [DesignLevel] INT
);

WITH RCTE AS 
(
    SELECT
        *,
        1 AS [Lvl]
    FROM 
        [Design]
    WHERE 
        [ParentDesignKey] IS NULL

    UNION ALL

    SELECT
        [D].*,
        [Lvl] + 1 AS [Lvl]
    FROM 
        [dbo].[Design] AS [D]
    INNER JOIN 
        [RCTE] AS [rc] ON [rc].[DesignKey] = [D].[ParentDesignKey]
)
INSERT INTO [#DesignLvl]
    SELECT
        [DesignKey], [Lvl]
    FROM 
        [RCTE]
Run Code Online (Sandbox Code Playgroud)

创建后,在非常大的查询中将LEFT JOIN用作:

SELECT... 
FROM.. 
LEFT JOIN [#DesignLvl] AS [dl] ON d.DesignKey = dl.DesignKey
WHERE ...
Run Code Online (Sandbox Code Playgroud)

该查询有效,但是性能下降并且查询现在太慢。有什么方法可以优化此表?

CTE执行计划

在此处输入图片说明

我尝试将CLUSTERED索引添加为:

CREATE TABLE [#DesignLvl]
(
    [DesignKey] INT, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server common-table-expression sql-server-2017

7
推荐指数
1
解决办法
370
查看次数

Set full treeview to clipboard

I'm working with windows forms and I want to copy entire tree view with their childrens in order set in clipboard in KeyDown event

First I try to set parent nodes as:

  private void tvProjectList_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == (Keys.C))
            {
                var treeViewParents = "";
                foreach (TreeNode tn in tvProjectList.Nodes)
                {
                    treeViewParents += tn.Text + Environment.NewLine;
                }
                Clipboard.SetText(treeViewParents);

            }
        }
Run Code Online (Sandbox Code Playgroud)

But it just get one node instead all nodes. How am I supposed to do it? Regards …

c# treeview winforms

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

创建使用一个foreach而不是多个的方法

我正在使用c#,我有工作代码,我在每行重复相同的代码,这是因为我正在创建列表,转换,提取数据等.

所以我有多个foreach子句,多个lists,多个转换listdatatables.我的问题是,为了获得干净的代码,我该怎么做才能重新分解这个?

码:

private void BtnLoadReport_Click(object sender, EventArgs e)
{
   var db = new SQLDataMgr();

   List<string> DesignStatusList = new List<string>();
   List<string> ShopStatusList = new List<string>();
   List<string> CustomerTypeList = new List<string>();
   List<string> CustomerList = new List<string>();
   List<string> ResellerList = new List<string>();
   List<string> StateList = new List<string>();
   List<string> ProjectManagerList = new List<string>();
   List<string> SalesRepresentativeList = new List<string>();

   var checkedDesignStatus = cboDesignStatus.CheckBoxItems.Where(x => x.Checked);
   var checkedShopStatus = cboShopStatus.CheckBoxItems.Where(x => x.Checked);
   var checkedCustomerType = cboShopStatus.CheckBoxItems.Where(x => …
Run Code Online (Sandbox Code Playgroud)

c# winforms

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

复选框输入总是返回 false 值

我正在使用 asp.net core 2.1,我有一个简单的视图,其形式如下:

@model Security.WebUi.Pages.AssignClaimToUserModel

<form method="post">
    <div>
        <label>User:  </label>
        <select asp-for="UserId" asp-items="@Model.UserList">
            <option>Please select one</option>
        </select>
    </div>
    <div>
        <label>Role?</label>
        <input type="checkbox" name="IsRole" id="isRole" />
    </div>
    <div>
        <label>Claim Type</label>
        <input type="text" name="ClaimType" id="claimType" />
    </div>
    <div>
        <label>Claim Value</label>
        <input type="text" name="ClaimValue" />
    </div>
    <button type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

IsRole正如你所看到的,我有一个带有属性的复选框

所以在我的模型中我有一个布尔值:

 public class ClaimToUserdModel
    {
        public string ClaimType { get; set; }
        public string ClaimValue { get; set; }
        public Guid UserId { get; set; }
        public bool IsRole { get; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-core asp.net-core-2.1

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

使用参数更新表

我有一个存储过程来获取这些参数:

@TaskId        UNIQUEIDENTIFIER,
@ColumnName    VARCHAR(255) = NULL,
@CheckBoxValue VARCHAR(255) = NULL
Run Code Online (Sandbox Code Playgroud)

然后我有这样的UPDATE声明:

UPDATE [RedMarkItems]
SET @ColumnName = @CheckBoxValue
WHERE [TaskId] = @TaskId
Run Code Online (Sandbox Code Playgroud)

如果我运行我的存储过程,如:

exec usp_RedMarkItem_Insert 
         @TaskId = '82ab0c4b-9342-46fa-acbe-c00b87571bf9', 
         @ColumnName = Item7, 
         @CheckBoxValue = 1, 
         @CurrentUser = '6074caea-7a8e-4699-9451-16c2eaf394ef'
Run Code Online (Sandbox Code Playgroud)

它只是说不影响表

命令已成功完成

但是值仍然相同,但是如果我在UPDATE语句中替换值就像

UPDATE [RedMarkItems]
SET Item7 = 1
WHERE [TaskId] = '82ab0c4b-9342-46fa-acbe-c00b87571bf9'
Run Code Online (Sandbox Code Playgroud)

有用!如果我使用参数,为什么它不起作用?问候

sql t-sql sql-server

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

设置DEFAULT值列后INSERT失败

我将列添加到表中:

RedMarkItemsId (IDENTITY(1,1) NOT NULL PRIMARY KEY)
TaskId (UNIQUEIDENTIFIER)
CreationDate (DATETIME)
CreatedBy (UNIQUEIDENTIFIER)
Run Code Online (Sandbox Code Playgroud)

我想创建如下列:

  ALTER TABLE RedMarkItems ADD Item1 BIT DEFAULT(0)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试插入一些值时:

INSERT INTO RedMarkItems 
VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF')
Run Code Online (Sandbox Code Playgroud)

它抛出错误:

列名或提供的值数与表定义不匹配.

如果我设置DEFAULT(0)为新列,为什么我会收到此错误?

表创建脚本:

CREATE TABLE RedMarkItems 
(
    RedMarkItemsId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    TaskId UNIQUEIDENTIFIER,
    CreationDate DATETIME,
    CreatedBy UNIQUEIDENTIFIER
)
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

0
推荐指数
1
解决办法
206
查看次数

在WHERE子句中使用AND和OR条件获取错误的结果

我有这样一张桌子:

+-------------+--------------------------------------+--------------------------------------+---------------+
| BackCheckId |                TaskId                |               EmpGuid                | CompletedDate |
+-------------+--------------------------------------+--------------------------------------+---------------+
|           1 | B92F7079-2011-44D6-B3C4-BD2F7481C97F | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL          |
|           2 | 82AB0C4B-9342-46FA-ACBE-C00B87571BF9 | 6074CAEA-7A8E-4699-9451-16C2EAF394EF | NULL          |
+-------------+--------------------------------------+--------------------------------------+---------------+
Run Code Online (Sandbox Code Playgroud)

查询创建:

CREATE TABLE Backchecks(
  BackCheckId int,
  TaskId UNIQUEIDENTIFIER,
  EmpGuid UNIQUEIDENTIFIER,
  CompletedDate DATETIME
);

INSERT INTO Backchecks VALUES
(1, 'B92F7079-2011-44D6-B3C4-BD2F7481C97F', '6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL),
(2, '82AB0C4B-9342-46FA-ACBE-C00B87571BF9','6074CAEA-7A8E-4699-9451-16C2EAF394EF',NULL)
Run Code Online (Sandbox Code Playgroud)

我想要做的是根据这个过滤这些数据currentEmpGuid我声明变量来测试它:

 DECLARE @CurrentEmpGuid UNIQUEIDENTIFIER = 'CC713AC9-ED79-47E3-BA37-47F2D5009BFC'   
DECLARE @FilterEmpKey INT = NULL
    SELECT * FROM Backchecks AS BC 
    WHERE [BC].[CompletedDate] IS NULL
                           AND (@FilterEmpKey IS NULL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

-1
推荐指数
1
解决办法
55
查看次数

检查是否已选中表单的所有复选框

我有多个复选框,我是从代码中创建的,所以我知道我可以使用以下复选框:

foreach (var checkBox in this.Controls.OfType<CheckBox>())
            {

            }
Run Code Online (Sandbox Code Playgroud)

但是,我想知道或者我想要的结果是知道我的表单的所有复选框是否被检查,如果所有复选框被选中则返回true,如果缺少复选框则返回false ...如何实现?问候

bool allChecked = ... 
Run Code Online (Sandbox Code Playgroud)

c# winforms

-3
推荐指数
1
解决办法
111
查看次数