标签: sql-server

提高将大型 xml 文件 (~300 MB) 转换为 SQL Server 中的关系表的性能

所以这就是我到目前为止所拥有的:

--Read xml content into a XML data type variable
DECLARE @FileData XML
SELECT @FileData = CONVERT(XML, BulkColumn)
FROM OPENROWSET(BULK '\\file_path\test.xml', SINGLE_BLOB) AS x
--Read from the XML variable to create Entity-Attribute-Value table
SELECT N1.Id.value('@Id', 'varchar(50)') as Id
    , N1.Id.value('@Name', 'varchar(100)') as Name
    , N2.AttributeLongName.value('@AttributeName', 'varchar(100)') as AttributeName
    , N3.AttributeValue.value('.', 'varchar(MAX)') as AttributeValue
FROM @FileData.nodes('/Data/Entities/Entity') as N1(Id) ---1st lvl Node contains the Entity
cross apply Id.nodes('Attributes/Attribute') as N2(AttributeName) --2nd lvl Node contains AttributeName
cross apply AttributeName.nodes('Values/Value') as N3(AttributeValue) --3rd lvl …
Run Code Online (Sandbox Code Playgroud)

performance xml sql-server xquery

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

SQL Server 存储过程导致 100% CPU 使用率

我正在使用 SQL Server 2008 R2

我们有一个存储过程,它在运行时会导致 100% 的 CPU 使用率。所述 SP 每月运行一次,并执行大约 5 分钟的繁重计算。

由于 SP 每月运行一次,我们并不特别关心是否需要 30 分钟或更长时间才能完成该过程,但是占用所有可用的 CPU 资源是有问题的。我们想限制此特定存储过程的 CPU 使用率。

SQL Server 中有这样的选项吗?

sql-server stored-procedures

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

ISNULL() OR 在 UPDATE 语句中为 NULL

我必须UPDATE在具有 50 万条记录的实时在线数据库上运行一条语句。我想知道哪个语句运行得更快:

Update Table set REC_ID = isnull(REC_ID,'')

Update Table set REC_ID = '' where REC_ID is null
Run Code Online (Sandbox Code Playgroud)

我正在使用 Microsoft SQL Server 2012

null sql-server sql-server-2012 update

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

SQL Server 的聚合函数忽略空值。我该如何纠正?

根据MS 的知识库

除了 COUNT,聚合函数忽略空值。

有谁知道我怎样才能让它正常工作,也就是说,如果它试图与值中的空值聚合,则返回空值?

例子:

SELECT SUM("col")
FROM (
    SELECT NULL "col"
    UNION
    SELECT 1 "col"
) test
Run Code Online (Sandbox Code Playgroud)

我希望这个查询返回NULL,而不是 1。

null sql-server aggregate

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

如果不存在则查询返回零

我有一个表currencypaymenttypeinvoiceamount。我必须写一个查询来获取currencypaymenttypeinvoiceamount完成。

这对于 group by 来说非常简单。但实际上我有3种支付类型——0、1、2。表中的数据是

    Currency   PaymentType Invoice Amount
    Aaa.        0.           100
    Aaa.        1.           200
    Aaa.        1.            50
    Bbb.        0.           150
    Bbb.        1.           100
    Bbb.        2.           100
Run Code Online (Sandbox Code Playgroud)

我的查询是

Select currency, paymenttype, sum(invoiceamount) as total
from table 
group by currency, paymenttype
Run Code Online (Sandbox Code Playgroud)

结果

      Currency  paymenttype total
      Aaa.       0.          100
      Aaa.       1.          250
      Bbb.       0.          150
      Bbb.       1.          100
      Bbb.       2.          100
Run Code Online (Sandbox Code Playgroud)

作为Aaa。没有paymenttype2 它也应该显示一个值为 0 的行,如下所示。

      Aaa.      2.     0 …
Run Code Online (Sandbox Code Playgroud)

join sql-server

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

每个数据子集的 SQL Server 唯一索引,基于另一列的值

假设我有一张Customers桌子和一张Emails桌子。Emails表有这些字段:

Id   
CustomerId   
EmailValue   
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个约束,以便每个客户都不应该注册重复的电子邮件。我能想到的方法有:

  1. 创建一个函数以确保每个新电子邮件值的唯一性,并在检查约束中调用该函数
  2. 创建触发器,并在每次插入或更新时确保每个客户的电子邮件不重复
  3. 完全忘记数据库,将这部分业务放在我的应用程序层

但是,我最近熟悉了 SQL Server 的筛选索引。尽管我不知道它在这种特定情况下是否可以帮助我。我见过的大多数示例都是过滤掉NULL值,以便为可空列创建唯一索引。

有没有办法可以使用过滤索引来实现我想要的?

sql-server filtered-index unique-constraint

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

基于其他位列的计算列位

从其他位列计算位列的公式是什么?

例如:

CREATE TABLE #Employee
(
[empNumb]       [INT] identity(1,1) PRIMARY KEY,
[IsOk]          [BIT] NOT NULL, -- This is computed from other three columns.
[HasValidHours] [BIT] NOT NULL,
[NoDemerits]    [BIT] NOT NULL,
[NoAccidents]   [BIT] NOT NULL
);

ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_HasValidHours]  
  DEFAULT ((0)) FOR [HasValidHours];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoDemerits]  
  DEFAULT ((0)) FOR [NoDemerits];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoAccidents]  
  DEFAULT ((0)) FOR [NoAccidents];
Run Code Online (Sandbox Code Playgroud)

IsOk将根据,和的-ing计算。HasValidHoursNoDemeritsNoAccidents

sql-server sql-server-2012 table

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

备份一个非常庞大的 SQL Server 数据库

我们有一个大小超过 200GB 的 SQL Server 2008 数据库。服务器上没有磁盘空间来进行备份。我真的需要备份或制作此数据库的另一个副本。实现这一目标的最佳方法是什么?

谢谢

sql-server-2008 sql-server

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

如何在更新 (SQL Server) 上设置 IN 值?

快速提问,我确实尝试过谷歌但找不到答案。

我在这里有 3 个单独的查询,我想做SET IN ('price1', 'price2', 'price3')但是当我尝试时出现错误。我该怎么做?

Update apotable
set price1 = '0.00'
where po_number IN ('x', 'y', 'z')

Update apotable
set price2 = '0.00'
where po_number IN ('x', 'y', 'z')

Update apotable
set price3 = '0.00'
where po_number IN ('x', 'y', 'z')
Run Code Online (Sandbox Code Playgroud)

sql-server

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

每月备份特定天数 SQL Server

如何使用维护计划或代理作业在 SQL Server(我同时使用 SQL Server 2005 和 2008)上每月仅备份特定日期。我的意思是从每个月的 28 号备份我的数据库到下个月的 08 号等等?

sql-server backup maintenance-plans

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