标签: sql-server-2016

如何在不使用catch异常的情况下从.NET应用程序检测sql server超时

在我当前的应用程序中,我通过调用T-SQL Update命令执行更新.问题是当时其他用户锁定了同一记录.

在.NET应用程序中,应用程序将等待SQL Server超时,然后它将抛出SqlException超时.

是否可以首先检查特定记录是否被其他进程锁定而不是捕获异常?

c# sql-server sql-server-2005 sql-server-2008 sql-server-2016

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

'JSON'附近的语法不正确 - SQL Server 2016

所以我最近安装的SQL Server 2016 CTP3主要用于JSON输出功能.我试图在我的SQL查询中使用它,就像它在MSDN下面的链接中显示的那样.关键字JSON不会变为蓝色并出现错误"JSON'附近的语法不正确"

https://msdn.microsoft.com/en-us/library/dn921882%28v=sql.130%29.aspx?f=255&MSPPError=-2147217396

可能有什么不对?

编辑:我正在使用AdventureWorks DB for SQL Server 2016进行测试.查询是

SELECT * FROM Person.Contact FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

sql json sql-server-2016

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

如何将多个表作为一个XML返回?

我有以下脚本:

DECLARE @columns TABLE (
    Caption varchar(50),
    Width int);

INSERT INTO @columns 
VALUES ('Id', 0), ('Name', 100);

DECLARE @rows TABLE (
    Id int,
    [Name] varchar(50));

INSERT INTO @rows 
VALUES (1, 'John'), (2, 'Steve');

SELECT *,
    (SELECT *
     FROM @rows
     FOR XML PATH('Row'), ROOT('Rows'), TYPE, ELEMENTS)
FROM @columns
FOR XML PATH('Column'), ROOT('Results'), TYPE, ELEMENTS;
Run Code Online (Sandbox Code Playgroud)

我需要返回以下XML:

<Results>
    <Columns>
        <Column>
            <Caption>Id</Caption>
            <Width>0</Width>
        </Column>
        <Column>
            <Caption>Name</Caption>
            <Width>100</Width>
        </Column>
    </Columns>
    <Rows>
        <Row>
            <Id>1</Id>
            <Name>John</Name>
        </Row>
        <Row>
            <Id>2</Id>
            <Name>Steve</Name>
        </Row>
    </Rows>
</Results>
Run Code Online (Sandbox Code Playgroud)

我的想法是,我将XML转换为DataSet2 DataTables …

c# sql sql-server sql-server-2016

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

SSAS度量值组估计大小估计行

我想了解更多关于SSDS的“度量值组”的属性面板的两个属性:EstimatedRows和EstimatedSize。关于这两个方面似乎很少有文档。

我确实发现我可以运行“聚合设计向导”,它不仅会计算行数,而且还会自动填充每个度量值组中的EstimatedRows属性。所以问题1:SSAS如何使用此属性,并且在任何地方都有记录?

在我的测试多维数据集中,度量值组的EstimatedSize属性是只读的(显示为灰色)。我发现的少量文档暗示我可以/应该设置此属性。问题2,为什么这是只读的,并且有任何使用文档?

(我正在使用SQL Server 2016)

sql-server ssas visual-studio sql-server-2016 ssas-2016

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

如何强制SQL Server返回空的JSON数组

我正在使用SQL Server 2016,它支持JSON PATH返回JSON字符串。我想知道如何获取一个简单的空json数组,这意味着[]当我的查询或子查询返回null时。我试过这个查询:

SELECT '' AS TEST
FOR JSON PATH,ROOT('arr')
Run Code Online (Sandbox Code Playgroud)

返回:

{"arr":[{"test":""}]}
Run Code Online (Sandbox Code Playgroud)

还有这个:

SELECT NULL AS TEST
FOR JSON PATH,ROOT('arr')
Run Code Online (Sandbox Code Playgroud)

返回:

{"arr":[{}]}
Run Code Online (Sandbox Code Playgroud)

更好,但仍然不正确,我需要这样做:

{"arr":[]}
Run Code Online (Sandbox Code Playgroud)

sql-server json sql-server-2016

7
推荐指数
4
解决办法
4257
查看次数

使用实体框架中的 MSSQL 2016“AT TIMEZONE”功能?

如何使用AT TIMEZONE实体框架中的 MSSQL 2016功能?

换句话说,如何生成

SELECT MyTimestamp AT TIME ZONE 'Central European Standard Time' FROM MyTable
Run Code Online (Sandbox Code Playgroud)

通过实体框架中的 LINQ ?它甚至支持吗?可以为此功能手动扩展实体框架吗?

总是可以选择使用时区列创建数据库视图,但理想情况下我想避免这种额外的视图。

linq sql-server entity-framework sql-server-2016

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

SQL Server - “for json path”语句返回的 JSON 字符串不超过 2984 行

我正在尝试使用“for json path”语句在复杂且嵌套的 JSON 字符串中生成大量数据,并且我使用多个函数来创建此 JSON 字符串的不同部分,如下所示:

declare @queue nvarchar(max)

select @queue = (
    select x.ID as layoutID
        , l.Title as layoutName
        , JSON_QUERY(queue_objects (@productID, x.ID)) as [objects]
    from Layouts x
    inner join LayoutLanguages l on l.LayoutID = x.ID
    where x.ID = @layoutid
    group by x.ID, l.Title
    for json path
)

select @queue as JSON
Run Code Online (Sandbox Code Playgroud)

到目前为止,JSON 将是:

{
    "root": [{
        "layouts": [{
            "layoutID": 5
            , "layoutName": "foo"
            , "objects": []
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

然后将调用“queue_objects”函数来填充“objects”数组:

队列对象

select 0 as objectID
    , …
Run Code Online (Sandbox Code Playgroud)

sql json sql-server-2016 json-query for-json

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

时态表中的日期函数

从 SQL Server 2016 开始,可以自动创建时态表。我想创建一个简单的查询来检索指定日期的数据。但是,当我尝试像这样在查询中指定日期时,它会出现语法错误:

SELECT * FROM Person FOR SYSTEM_TIME AS OF GETDATE()
Run Code Online (Sandbox Code Playgroud)

我什至尝试将数据类型转换为 datetime2,因为日期是这样存储的,但它仍然不起作用:

SELECT * FROM Person FOR SYSTEM_TIME AS OF CONVERT(datetime2,GETDATE())
Run Code Online (Sandbox Code Playgroud)

出现此问题,但是当我第一次执行SELECT GETDATE()然后复制文本并将其粘贴到查询中时,它工作正常。如何使用 AS OF 关键字指定日期时间?

提前致谢。

sql t-sql sql-server-2016 temporal-tables

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

如何将报表服务器订阅 SQL 代理作业名称链接到其正在运行的报表的名称

在我的报表服务器数据库上,所有用户的报表订阅都保存为 SQL 代理作业,这是正常情况。

如果我连接到报表服务器数据库并列出 SQL 代理作业,我会看到一个以随机字符串命名的巨大作业列表,例如:

000D5787-8802-4CB1-9784-8897C596003F

通过反复试验的过程,我发现特定的代理作业与我的“每日销售”报告相关,并且我能够查看作业历史记录,将 SQL 命令添加到订阅运行的代码中,等等。

但是,我有数百份用户报告。我需要能够以某种方式将报告的名称与 SQL 代理作业的名称联系起来。要么让报表服务器更有效地命名其订阅作业,要么通过使用某种查找表,当我向下滚动作业列表时可以参考该表格。

有任何想法吗?我尝试查看 ReportServer 的“订阅”表,它确实有一些看起来相似的 ID 号,但它们都不与作业名称匹配。

sql-server reporting-services sql-server-2016

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

SQL Server 从 JSON 中提取第一个数组元素

我将 json 存储在 SQL Server 中的一列中,我需要修改它以从中删除方括号。格式如下。似乎找不到一个好的方法来做到这一点。

[ { "Message":"Info: this is some message here.", "Active":true } ]
Run Code Online (Sandbox Code Playgroud)

一种方法是使用下面的查询来完成此操作,但是这个查询非常非常慢,而且我需要在非常大的数据集上运行。

select a.value
from dbo.testjson e
cross apply OPENJSON(e.jsontext) as a
where isjson(e.jsontext) = 1
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一其他方法就是进行字符串操作,但这可能很容易出错。有人可以帮忙解决这个问题吗?

sql-server-2016

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