标签: sql-server-2019

SQL查询获取Json数组的计数

我有下面的 Json 对象。如何获取对象数组的计数。

{
  "Model": [
    {
  "ModelName": "Test Model",    
  "Object": [
     {
       "ID": 1,
       "Name": "ABC"           

     },
     {
       "ID": 11,
       "Name": "ABCD"          
    },         
 ]  
 }]}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询,但似乎 JSON_Length 不可用。

SELECT ModelName,
       JSON_LENGTH(JsonData, '$.Model[0].Object')
    FROM TabA
Run Code Online (Sandbox Code Playgroud)

预期输出应该是

 ModelName      COUNT
 Test Model      2
Run Code Online (Sandbox Code Playgroud)

sql json sql-server-2019

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

无法连接到 (localdb)\MSSQLLocalDB - 由于触发器执行

我的机器上有一个运行良好的 SQL Server Express 实例,但我不知道发生了什么变化。我现在收到此错误:

由于触发器执行,登录“myusername”失败。
将数据库上下文更改为“master”。

我试图遵循这个:https : //dba.stackexchange.com/questions/218811/logon-failed-for-login-due-to-trigger-execution

因此,有很多关于删除违规触发器的想法,如果需要,您可以连接专用管理连接 (DAC)。我不必通过 DAC 连接,因为我可以MACHINENAME\INSTANCENAME很好地连接到 sa 。我的问题仅在与(localdb)\MSSQLLocalDB. 出于某种原因,LocalDB 只会导致此错误。

当我使用“sa”登录并运行此命令时:

SELECT * FROM sys.server_triggers;
Run Code Online (Sandbox Code Playgroud)

没有返回任何行。这是一个空的结果。那么,我需要禁用的触发器在哪里?LocalDB 是否没有连接到与我的 SQL Server Express 实例相同的实例?因此,LocalDB 连接到其他有触发器问题的东西,而连接MACHINENAME\INSTANCENAME没有触发器。我认为如果他们在那里,'sa' 登录将能够看到触发器。

编辑1:好的。我现在在 msdb 数据库中找到了所有这些触发器。我检查了所有数据库,这是唯一一个有任何触发器的数据库。

syscollector_collection_item_parameter_update_trigger

syscollector_tsql_query_collector_delete_trigger

触发目标服务器_插入

syspolicy_update_system_health_state

sysmanagement_delete_shared_server_group_trigger

syspolicy_execution_trigger

trig_notification_ins_or_upd

触发通知删除

syspolicy_validate_events

syspolicy_insert_job_create_trigger

syspolicy_update_job_update_trigger

syspolicy_insert_policy_trigger

syspolicy_update_policy_trigger

syspolicy_delete_job_delete_trigger

syspolicy_instead_delete_policy_trigger

syspolicy_insert_condition_trigger

syspolicy_for_update_condition_trigger

trig_sysoriginatingservers_delete

syspolicy_after_update_condition_trigger

trig_sysjobs_insert_update

syscollector_collection_set_is_running_update_trigger

trig_sysmail_profile

trig_sysschedules_insert_update

trig_principalprofile

trig_sysmail_account

trig_sysmail_profileaccount

trig_backupset_delete

trig_sysmail_profile_delete

trig_sysmail_servertype

trig_sysmail_server

trig_sysmail_configuration

trig_sysmail_mailitems

syspolicy_insert_target_set_level_trigger

trig_sysmail_attachments

syspolicy_update_target_set_level_trigger

trig_sysmail_log

syspolicy_insert_target_set_trigger

syspolicy_delete_target_set_trigger

sql sql-server sql-server-2019 sql-server-2019-express

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

SQL Server 2019 中标量 UDF 内联问题

当我第一次运行下面的函数时,它会失败并出现以下错误:

\n\n
\n

8124(在包含外部引用的聚合表达式中指定了多个列。)

\n
\n\n

第二次运行就正常了。

\n\n

如果我删除*DATEDIFF(D, e.FRADATO , @til) 它\xe2\x80\x99s 没问题。

\n\n
ALTER FUNCTION [dbo].[fnc_2019_test] \n    (@m_id INT, @fra DATE, @til DATE)  \nRETURNS INT\nAS  \nBEGIN \n    RETURN\n        (SELECT     \n             SUM(ISNULL(e.FORBRUK, 0) * DATEDIFF(D, e.FRADATO, @til))\n         FROM \n             dbo.mlr_eos_avl e \n         WHERE  \n             e.M\xc3\x85LER_ID = @m_id   \n             AND @fra < e.DATO \n             AND DATEADD(D, -1, @til) >= e.FRADATO) \n\nEND\n
Run Code Online (Sandbox Code Playgroud)\n\n

该函数在SQL Server 2008 R2和SQL Server 2016中运行没有任何问题。

\n

t-sql sql-server user-defined-functions sql-server-2019

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

SQL Server Express LocalDb 2019 的安静(无人值守)安装

使用 SQL Server Express LocalDb 2012(Microsoft MSI 下载),可以从命令行进行无人值守安装:

msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES
Run Code Online (Sandbox Code Playgroud)

在我测试过的各种版本的 MS Windows 上,这对我来说非常稳定。

我无法使用 SQL Server Express LocalDb 版本 2019(Microsoft MSI 下载)以这种方式工作。以前工作的开关组合不再起作用。

如何在安静(无人值守)模式下安装 SQL Server Express LocalDb 2019(特定的 SqlLocalDB.msi)?

我还尝试下载 SQL Server 2019 媒体并使用文档(运行 setup.exe 的 MS 文档)中提供的开关调用 setup.exe,但它也不允许我安装 LocalDb。我尝试了几种开关组合,如下所示,但它对我不起作用,产品没有安装。

setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION="install" /FEATURES=LocalDb
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议。

sql-server sql-server-2019 sql-server-2019-express

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

VS 2019 升级后无法调试 .NET

我正在使用 VS 2019 调试 SQL Server CLR C# .NET 代码。我收到了来自 VS 的升级通知,我做了并重新启动。我现在在尝试调试时收到错误

无法调试 .NET 代码。无法附加到“....”上的 SQL Server。64 位版本的 Visual Studio 远程调试器 (MSVSMON.EXE) 不能用于调试 32 位进程或 32 位转储。请改用 32 位版本。

现在我的 SQL Server (2019) 是 64 位的,而 SQLCLR 平台目标是 x64,那么是什么让它认为涉及 32 位进程呢?

此外,SQL Server 和 VS 2019 在同一台机器上,这不是远程机器问题。

c# sql-server sqlclr sql-server-2019

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

Docker 中的 SQL Server 命名实例

如何在 Docker 容器内运行命名的 SQL Server 实例?

我有一个应用程序,它有一个指向命名 SQL Server 实例的连接字符串,例如Data Source=HostName\InstanceName;这个连接字符串对我来说改变起来非常成问题。我想对该 SQL Server 实例进行 docker 化。我已经配置了它,以便我可以通过sqlcmdusing连接到 dockerized 实例sqlcmd -S HostName,但是在使用时sqlcmd -S HostName\InstanceName(应相当于此应用程序正在使用的连接字符串),它不会建立连接。

sql-server docker sql-server-2019

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

如何确定给定的表是否是内存优化的?

早上好,

我的第一个问题是如何确定在 MS SQL Server 中创建的表是否是内存优化的。我有一些表,但我不记得我创建的其中一些表是否经过内存优化。

非常感谢您的回答。

sql-server sql-server-2016 sql-server-2019

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

如何为 SQL 表自动生成数据类型

我有许多包含 200 多列的非规范化表。这些表位于 SQL Server 中,并且它们通常(如果不总是)具有 varchar(100) 或 nvarchar(100)(字符串)数据类型。但是,大多数列都是整数、浮点数或其他数据类型。我不可能遍历每个表和列并选择数据类型。由于许多原因,包括应用程序兼容性、性能、加入和其他原因,我必须将这些转换为正确的(或至少接近正确的)数据类型。有什么工具可以使用吗?有没有人创建代码来完成这个?它不一定是完美的,但一场势均力敌的比赛就可以了。

我试过什么:

  1. 我尝试将这些表导出到 Excel,然后移回 SQL。它起作用了,但它比手动操作要花费很多很多时间,因为 Excel 搞砸了您的数据并将其转换为任何感觉(想想科学记数法、数字日期等......天哪!)。这是非常耗时且失败的。如果您选择在 Excel 中使用“文本”选项,它只会将所有内容转换回 varchar (x)
  2. 我尝试导出到平面文件并使用具有智能数据类型的 VS 或 SSMS 新版本。这比 Excel 效果更好,但不幸的是,即使是一行冲突也会停止整个过程。该工具很笨重,会出现严重错误并且不会告诉您哪一行导致了问题。使用这种方法也很糟糕,因为这些表非常庞大,而且非常耗时。尤其是当您考虑工具故障排除时。

感谢您的帮助。如果您不要求我通过试图说我的设置不好/等来放弃任务,我也很感激。

sql sql-server ssis sql-server-data-tools sql-server-2019

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

如何在 SQL Server 中编写区分大小写的 WHERE CLAUSE

好吧,这个让我难住了。我希望这不是愚蠢/显而易见的事情......

我正在尝试修复客户端数据库中的地址。我有一个函数,它接受一个字符串并返回一个字符串,其中每个单词的第一个字母都大写。
我试图只传递全部大写或全部小写的地址,但它返回的是整个数据集。前 3 列都是正确的,所以我不明白为什么 WHERE 不起作用。

这是我的代码。

    SELECT
        [ConvertFirstLettertoCapital]([Address]) AS [Standard],
        UPPER([Address]) AS [Upper],
        LOWER([Address]) AS [Lower],
        [Name],
        [Address],
        [Address 2],
        [City],
        [State]
    FROM [Address_List]
    WHERE
        [Address] = UPPER([Address]) OR
        [Address] = LOWER([Address])
Run Code Online (Sandbox Code Playgroud)
  • MS SQL v15.0.1083.2
  • SSMS v15.0.18330

sql sql-server case-sensitive where-clause sql-server-2019

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

SQL Server:奇怪的无效对象名称

我正在尝试创建一个存储过程,但收到此错误:

消息 208,级别 16,状态 6,过程 SP_MergeStaggedPoliticalPartyAgents,第 1 行 [批处理开始第 0 行]
对象名称“SP_MergeStaggedPoliticalPartyAgents”无效。

SQL如下,减去内容

CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
    -- Content removed for brevity
END
Run Code Online (Sandbox Code Playgroud)

如果我无论如何改变名称,即添加额外的 s,或删除末尾的 s。它工作 100% 正常,所以我的问题是我使用的这个特定名称是什么导致它失败?

SQL Server 是否有该名称违反的名称验证正则表达式?这是一个保留名称吗?

IMO 更奇怪的补充:为了测试我是否去:

CREATE PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
    -- Content removed for brevity
END
Run Code Online (Sandbox Code Playgroud)

它运行良好并在此基础上创建存储过程,从那时起该CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents语句就可以正常工作。

似乎不存在具有此名称的存储过程,它将失败,但如果第一次初始化它,则会CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents传递。CREATE SP_MergeStagedPoliticalPartyAgents

笔记:

  • 我已经以相同的方式创建了其他存储过程,这些存储过程都很好
  • 这不是权限问题,因为我可以很好地创建存储过程。
  • 通过 VS 运行脚本会导致相同的问题,因此它与 SMSS 无关
  • 这也不是内容。如果我用基本内容替换内容,select * from table问题仍然存在。

sql sql-server-2019

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