标签: sql-server-2005

SQL Xml 在空记录集上返回空根标记

我正在使用 Sql Server 2005 Express 版本在 xml 输出中显式地生成用户定义的节点。下面的代码工作正常,只是当用户表中不存在记录集时,我无法生成一个空节点。

代码:

select 1 as tag, null as parent,

FirstName as [User!1!FirstName!Element],

LastName as [User!1!LastName!Element]

FROM Users

FOR XML EXPLICIT
Run Code Online (Sandbox Code Playgroud)

输出:

<Users>
<FirstName>Ammy</FirstName>
<LastName>Dammy</LastName>
</Users>
<Users>
<FirstName>Lammy</FirstName>
<LastName>Lolly</LastName>
</Users>
Run Code Online (Sandbox Code Playgroud)

空表的预期输出:

<Users></Users>
Run Code Online (Sandbox Code Playgroud)

注意:我不喜欢这种xsnil方法,欢迎所有其他解决问题的方法

schema sql-server-2005 xml select

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

在不使用 Count 函数的情况下检索行数

我在下面写了一个查询,它给我一个语法错误,为什么会这样做,

SELECT MAX('Row') FROM 

(SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) 'Row' FROM USERS)
Run Code Online (Sandbox Code Playgroud)

错误描述:

Incorrect syntax near ')'.
Run Code Online (Sandbox Code Playgroud)

我不明白:(

sql-server-2005 count select

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

一个简单的 select 语句的速度问题

我遇到了一个选择语句运行时间太长的问题。我想知道我是否做错了什么,或者花这么长时间是否有意义。我使用的是 Microsoft SQL 2005 标准。我正在运行的选择需要大约 30 秒才能运行并返回大约 60000 条记录。这是sql:

SELECT l.ID, l.Number, l.Date, l.FirstName + ' ' + l.LastName Name,
    isnull(l.Amount,0) Amount1, isnull(l.Interest,0) Interest1,
    isnull(l.Interest2,0) Interest2, l.LastPayment,
    l.NextDueDate, isnull(l.Aging,0) Aging, isnull(l.InterestRate,0) InterestRate,
    ls.DisplayValue Status, lt.DisplayValue Type, l.LocationID
    FROM Table1 l
    JOIN Table2 ls ON (l.Table2ID=ls.ID)
    JOIN Table3 lt ON (l.Table3ID=lt.ID)
    WHERE
    l.Table3ID IN (SELECT Value FROM fn_Split('5,4,3', ','))
    AND l.Table2ID IN (SELECT Value FROM fn_Split('8,20,9,14,18,21,22,26,13,10,27,25,23,24,16,3,11,6,4,12,19,17,5,28,7,15', ','))
    AND l.LocationID IN (SELECT Value FROM fn_Split('4,6,8,9,10,14,11,12,13', ','))
Run Code Online (Sandbox Code Playgroud)

我添加了索引,但似乎没有什么可以加快速度。如果我删除选择中除 l.ID 和 l.Number 之外的所有内容,我可以在大约 8 …

sql-server-2005 database-design

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

sp_repladcolumn - 是否可以提供出版物列表以添加此列?

设想

我们在 3 个不同的出版物中有一个现有表(发给 3 个不同的订阅者),其中 1 个出版物没有发布所有列。

所有这些都是事务性请求订阅。

我现在需要在此表中添加更多列,我们只想将它们添加到前两个出版物中。然而来自MSDN

[ @publication_to_add =] 'publication_to_add' 是添加新列的发布的名称。Publication_to_add 是 nvarchar(4000),默认值为 ALL。如果为 ALL,则所有包含此表的发布都会受到影响。如果指定了publication_to_add,则只有该发布添加了新列。

这意味着您希望它指定1 个出版物或所有出版物。

帮助演示问题的示例表/出版物详细信息:

表样

[MyTable] (
    ID int IDENTITY(1,1) NOT NULL,
    myName varchar(50) NULL,
    myDOB datetime,
    myJob varchar(100),
    mySpouseID int )
Run Code Online (Sandbox Code Playgroud)

发布/订阅者示例

[InternalPublication] All fields, sent to InternalAdmin system
[Reporting] All fields, sent to Reporting/Datawarehouse system
[External] sent to External accessable system, fields sent:
    (ID, myName, myDOB)
Run Code Online (Sandbox Code Playgroud)

我如何添加:

[myMarriageDate] datetime NULL,
[myDivorceDate] datetime NULL …
Run Code Online (Sandbox Code Playgroud)

replication sql-server-2005 sql-server

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

创建分区会减少锁定,我们如何在 sql-server 中实现这一点?

客户希望我们的应用程序更快地处理更多数据,因此安排与他们的 dba 会面以讨论选项。

此应用程序会生成大量用于报告的数据。在每次运行之前,删除该项目的旧数据,执行计算,然后插入新数据。在繁忙时期,用户会排队数百个这样的生成任务,我们同时运行多达 30 个。每次运行可能会创建 60K 行。

dba 建议我们可以将应用程序更改为使用 30 个分区(例如,每个线程一个)以减少插入和删除期间线程之间的锁定。他们建议在标准 sql 中我们可以做类似的事情

INSERT INTO schema.table.partition (...) VALUES (...)
Run Code Online (Sandbox Code Playgroud)

我在msdn 文档中没有看到这种语法,这意味着更改这个应用程序很痛苦,但是否有可能做到这一点?据我了解,我们会改为使用分区函数基于表的列进行分区?

我已经阅读了创建分区函数文档,但我不完全确定如何创建一个函数来满足我们的需求。更糟糕的是,我还没有企业版来尝试这个,所以我为不正确的语法道歉。

我在想,例如,如果我们有一个 items 表和一个包含该项目数据的 itemdata 表,我们可能会通过基于类似的函数拆分数据来对 itemdata 表进行分区itemid mod 30。这会将项目 1 放在分区 1 中,将项目 2 放在分区 2 中,等等。我不确定我们是否可以在分区函数、方案、表声明中执行此操作,或者我们是否需要创建一个计算列并使用价值观条款?也不确定我们是否会看到任何性能改进?

这就是我认为我们可以实现的方式:

CREATE PARTITION FUNCTION SplittingItemIds_PFunc(decimal(18,0)) AS
RANGE LEFT FOR VALUES
(0,1,2,3, ... ,29)

CREATE PARTITION SCHEME SplittingItemIds_Scheme 
AS PARTITION SplittingItemIds_PFunc
ALL TO ([PRIMARY]);

CREATE TABLE ItemData  
(
    Id decimal(18,0),
    ItemId decimal(18,0),
    ...
)
ON …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2005 sql-server partitioning locking

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

启用哪些选项可以保证 SQL Server Express 2005 中的完全恢复?

我使用的是 SQL Server 2005 速成版。我注意到默认情况下Recovery Model设置为Simple。我将此选项更改为Full但想知道启用哪些其他选项以保证在没有备份的情况下完全恢复。

有没有办法对 SQL Server 2005 Express 数据库进行计划备份?

sql-server-2005 sql-server

4
推荐指数
3
解决办法
1437
查看次数

如何避免 SQL Server 2005 中的索引扫描?

我有一个名为的表Cell,其中包含诸如Cell_ID,CellValue和 之类的列CellRow

Cellrow最多可以有 1 到 5 的值。Cell_ID 字段上有一个聚集索引。该表包含 100000 行。

在我的查询中,我必须使用CellRowWHERE 子句中的列CellRow > 3来获取CellValue字段中的数据。问题是当我这样做时,总是表扫描使我的查询非常慢。

我还通过在CellRow字段上放置非聚集索引来检查它,但仍然进行索引扫描,因为该CellRow字段没有太多值,每次只有 1 到 5 个值。我不能CellID在 where 子句中使用。

我在查询中使用了许多表,例如

Table_1与接合table_2通过使用聚簇索引列和table 2与接合table_3通过使用非聚集的索引列,并table_3与被接合Cell通过使用非聚集的索引表。

最后的故事是,我从包括单元格表在内的所有表中得到不同的值,但是当我CellRow在 WHERE 子句中使用字段时,我得到了索引扫描。

任何解决方案:)

非常感谢!

performance sql-server-2005 sql-server

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

按参数在百分比和行之间切换 TOP 子句

对于一份报告,我正在查询用户假设必须根据百分比选择 TOP 值或固定行数。

我有两个想法

根据传递的参数调用两个不同的子存储过程。

if @param ='percent'
begin
      exec sp_data_TOP_by_Percent
end
if @param ='perRow'
begin
    exec sp_data_TOP_by_PerRow
end
Run Code Online (Sandbox Code Playgroud)

另一个想法是使动态 TSQL 查询像这样

declare @command nchar(max)

select @command = 'select top(10) '
                   + case @param 
                              when 'percent' then percent 
                              else ' '
                     end
                   + ' * '
                   + 'from table 
                        order by 1';
exec sp_executesql @command
Run Code Online (Sandbox Code Playgroud)

像这样的事情有第三种解决方案吗?
什么是更好的方法?第一个避免动态 TSQL,但在两个地方更难维护代码。我使用 MSSQL2005 作为数据库。

sql-server-2005 sql-server dynamic-sql t-sql parameter

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

SQL Server 如何处理并发请求?

假设 SQL Server 表有两MailID列,最大值 = 5。

如果两个不同的用户在同一时间执行INSERT,尝试插入查询Max(MailId)+1MailID列,是有可能,这两个新行可能获得的价值6?

我想了解 SQL Server 如何在内部同时处理多个请求。

sql-server-2005 sql-server

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

从 2005 年到 2008 年的 Sql Server 性能下降

我为我的性能基准测试练习设置了 sql server 2005,并且我将相同的数据库放在另一台服务器上,该服务器具有 sql server 2008 和硬件配置方面的精确副本。两台服务器的 Sql 服务器内存分配也相同。但是我的基准测试结果在 2008 年比 2005 年差。有人能帮我找到 sql server 2008 性能下降的原因吗?我需要注意什么,或者设置参数以获得更好或相同的结果集。

performance sql-server-2005 sql-server-2008

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