标签: sql-server-2008-r2

优化表中5000万条记录的删除操作

我需要删除大约5000万条记录(而不是整个表格),我搜索并找到了一些方法

这个查询做我想要的,我可以通过在a中存储子查询的结果来稍微优化它 #TempTable

我还可以做些什么?

到目前为止最快的查询:

CREATE TABLE #UserIDs ( UserId UNIQUEIDENTIFIER  NOT NULL  );
CREATE CLUSTERED INDEX myIndex ON #UserIDs (UserId)

INSERT INTO #UserIDs 
SELECT UserId FROM TableX WHERE UserID IS NOT NULL;

INSERT INTO #UserIDs 
SELECT UserID FROM TableY WHERE CreatorID IS NOT NULL;

    DELETE TOP (10000)
    FROM Users
    WHERE 
        Email IS NULL
        AND
        (
            (NOT EXISTS ( SELECT 1 FROM #UserIDs WHERE #UserIDs.UserId = Users.UserId ) )
        )

DROP TABLE #UserIDs
Run Code Online (Sandbox Code Playgroud)

执行计划

sql sql-server sql-server-2008 sql-server-2008-r2

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

索引扫描对表扫描的好处用简单的话说?

我用简单的单词搜索索引扫描对表扫描的真正好处,但仍然很困惑.比方说我有,

create table a(id int, id1 int, varchar(50) name)
Run Code Online (Sandbox Code Playgroud)

如果我选择,

select * from a where id1=1;
Run Code Online (Sandbox Code Playgroud)

它说表扫描,

如果我向id列添加索引并再次运行此查询,

select * from a where id1=1;
Run Code Online (Sandbox Code Playgroud)

它说索引扫描

更新:我不明白我会得到什么好处**其中id1 =**,因为索引是id.看这些图片,

在此输入图像描述

在此输入图像描述

更新:这认为这是一个重复的问题.请先阅读其他问题.我正在使用id1 =但另一个问题是使用select*,没有任何where语句.

sql sql-server-2008-r2

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

在SQL Server中,我正在创建一个社交网络数据库,并在响应请求时出错

我想创建一个存储过程来响应朋友请求,但这给了我一个语法错误

CREATE PROC RESPOND_REQUEST @id1   INTEGER,
                            @id2   INTEGER,
                            @reply BIT
AS
  BEGIN
      SELECT R
      FROM   Requests R
      WHERE  r.reciever_id = @id1
             AND r.sender_id = @id2

      SET R.reply = @reply
  END 
Run Code Online (Sandbox Code Playgroud)

sql sql-server database-design sql-server-2008-r2

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

如果left包含null,right包含value,则将单元格在sql中向左移动

在Sql中,我得到如下格式的结果。总共我有6列。第1行第6列中包含该值,第二行第5和第6行中包含该值。但是我需要检查每个单元格,如果上一列不包含该值,则意味着我需要在第一列中使用它。

实际结果

         a          b           c       d          e    f
                                                        1
                                                   1    2
                                        1          2    3
Run Code Online (Sandbox Code Playgroud)

预期结果:-

      a          b           c       d          e    f
      1                                             
      1          2                                        
      1          2           3                        
Run Code Online (Sandbox Code Playgroud)

请张贴一些好的答案(我正在使用SQL Server 2008-R2)

sql sql-server-2008-r2

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

T-SQL中的单行IF

在C#中我们可以编写单个if语法:

string test;
int value=1;
test = value>=1 ? "is bigger or equal one" : "is less than one";
Run Code Online (Sandbox Code Playgroud)

SQL Server 2008 R2中的T-SQL有单一IF语法吗?

t-sql if-statement sql-server-2008-r2

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

如何以期望的方式对这些记录进行排名/过滤

以下是以下的示例数据: -

emp doa
1   2014-01-01 00:00:00.000
1   2014-01-05 00:00:00.000
1   2014-01-08 00:00:00.000
1   2014-01-12 00:00:00.000
1   2014-01-15 00:00:00.000
2   2014-01-01 00:00:00.000
2   2014-01-05 00:00:00.000
2   2014-01-10 00:00:00.000
2   2014-01-12 00:00:00.000
2   2014-01-15 00:00:00.000
3   2014-01-01 00:00:00.000
3   2014-01-05 00:00:00.000
4   2014-01-10 00:00:00.000
4   2014-01-12 00:00:00.000
4   2014-01-15 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

doa - 分配项目的日期

要求是选择最接近今天的记录 - 给予过去日期更高的偏好 - 这将表明当前的分配.

预期结果如下─

emp doa
1   2014-01-08 00:00:00.000
2   2014-01-05 00:00:00.000
3   2014-01-05 00:00:00.000
4   2014-01-10 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我有一些限制: -

  • 数据库(表)无法更改 - 规范化是不可能 …

sql sorting ranking sql-server-2008-r2

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

SQL Server检查列上的约束和另一列中的值

我有一张桌子

PKID    FID     RESULT
======================
1       1       1
2       1       2 
3       1       2 
4       1       3 
4       2       1 
4       2       1
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置一个约束,这样如果已存在FID = 1且RESULT = 3的记录,我就无法在表中插入另一条FID = 1的记录.

我试图创建这样的函数

CREATE FUNCTION MyCheck
(
    -- Add the parameters for the function here
    @FID int
)
RETURNS bit
AS
BEGIN
    IF EXISTS (SELECT  PKID FROM MyTable WHERE (RESULT= 3) AND (FID= @FID))
        return 1
    return 0
END
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个函数创建约束时:

ALTER TABLE MyTable
    WITH CHECK ADD CONSTRAINT CK_Code …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2

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

设置预备语句参数的方法中的空指针异常

我从上次12小时开始上网,发现有太多用户正面临这个问题,但是没有人能够摆脱那个,我创建了一个JDialog,它有TextFields,我正在尝试从那些文本字段获取输入,并在DataBase中存储,但是Givi是以下异常.

Exception occurred during event dispatching:
Connection ok
Adnan
java.lang.NullPointerException
at srvrDataBaseClass.setPersonStatement(srvrDataBaseClass.java:90)
at srvrDataBaseClass.insertPerson(srvrDataBaseClass.java:71)
at EnrollmentForm.setPerson(EnrollmentForm.java:90)
Run Code Online (Sandbox Code Playgroud)

这是StackTrac指向的代码,

public void setPersonStatement(String nm,String fn,String cn,String add, byte[] fpt) {
    String Sql = "INSERT INTO PERSON (NAME, FNAME, CNIC, ADDR, FPT) VALUES ( ?,?,?,?,?)";
    try {
        if(con==null){
            System.out.println("Connection error");   <---------------- Connection is Not Closed
        }
        else {
            System.out.println("Connection ok");    <------Connection ok
        }


        con.prepareStatement(Sql);

    System.out.println(nm);     <----- This is Line :90,  But You can see its not Null, as the Value 'Adnan' is printed on …
Run Code Online (Sandbox Code Playgroud)

java prepared-statement sql-server-2008-r2

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

在SQL中提取字符串的一部分

在SQL Server 2008 R2中,我需要从字符串中提取字符50和60之间的所有内容.我在互联网上搜索了类似的功能,但没有真正找到可以解决问题的东西.

我可以使用以下公式在Excel上执行此操作: MID(A2, 50, 10)

sql extract sql-server-2008-r2

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

SQL数据透视表交叉应用于计数结果

我正在使用带有动态创建列的数据透视表来创建一个按月计算操作的报表.在动态查询中是一个涉及三列的CROSS APPLY.这导致我的总数增加了三倍.我目前正在攻击一个解决方案,我将计数除以3得到正确的答案.任何人都可以帮我提出一个更优雅的解决方案来解决这个问题吗?

编辑:我正在使用SQL Server 2008R2

鉴于此数据集(它实际上是一个视图,但我觉得在SO中重新创建整个模式并不明智):

CREATE TABLE vw_ActionsReport
    ([CID] int, [MitigationActionID] int, [Approved] int, [Status] varchar(11), [ChangedDate] datetime, [EntryDate] varchar(7), [STATE_ABBR] varchar(2), [STATE_NAME] varchar(11), [CENSUS_NAM] varchar(12), [CIS_NAME] varchar(21), [COUNTY_NAM] varchar(9), [CO_FIPS] int, [REGION] int, [ST_FIPS] int);

INSERT INTO vw_ActionsReport
    ([CID], [MitigationActionID], [Approved], [Status], [ChangedDate], [EntryDate], [STATE_ABBR], [STATE_NAME], [CENSUS_NAM], [CIS_NAME], [COUNTY_NAM], [CO_FIPS], [REGION], [ST_FIPS])
VALUES
    (090069, 5475, 1, 'Identified', '2012-11-27 16:21:27', '11_2012', 'CT', 'CONNECTICUT', 'OLD SAYBROOK', 'OLD SAYBROOK, TOWN OF', 'MIDDLESEX', 09007, 01, 09),
    (090069, 5476, 1, 'In Progress', '2012-11-27 …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot sql-server-2008-r2

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