我有下面的 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 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
当我第一次运行下面的函数时,它会失败并出现以下错误:
\n\n\n\n\n8124(在包含外部引用的聚合表达式中指定了多个列。)
\n
第二次运行就正常了。
\n\n如果我删除*DATEDIFF(D, e.FRADATO , @til) 它\xe2\x80\x99s 没问题。
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\nRun Code Online (Sandbox Code Playgroud)\n\n该函数在SQL Server 2008 R2和SQL Server 2016中运行没有任何问题。
\n使用 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)
我将不胜感激任何建议。
我正在使用 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 在同一台机器上,这不是远程机器问题。
如何在 Docker 容器内运行命名的 SQL Server 实例?
我有一个应用程序,它有一个指向命名 SQL Server 实例的连接字符串,例如Data Source=HostName\InstanceName;这个连接字符串对我来说改变起来非常成问题。我想对该 SQL Server 实例进行 docker 化。我已经配置了它,以便我可以通过sqlcmdusing连接到 dockerized 实例sqlcmd -S HostName,但是在使用时sqlcmd -S HostName\InstanceName(应相当于此应用程序正在使用的连接字符串),它不会建立连接。
早上好,
我的第一个问题是如何确定在 MS SQL Server 中创建的表是否是内存优化的。我有一些表,但我不记得我创建的其中一些表是否经过内存优化。
非常感谢您的回答。
我有许多包含 200 多列的非规范化表。这些表位于 SQL Server 中,并且它们通常(如果不总是)具有 varchar(100) 或 nvarchar(100)(字符串)数据类型。但是,大多数列都是整数、浮点数或其他数据类型。我不可能遍历每个表和列并选择数据类型。由于许多原因,包括应用程序兼容性、性能、加入和其他原因,我必须将这些转换为正确的(或至少接近正确的)数据类型。有什么工具可以使用吗?有没有人创建代码来完成这个?它不一定是完美的,但一场势均力敌的比赛就可以了。
我试过什么:
感谢您的帮助。如果您不要求我通过试图说我的设置不好/等来放弃任务,我也很感激。
好吧,这个让我难住了。我希望这不是愚蠢/显而易见的事情......
我正在尝试修复客户端数据库中的地址。我有一个函数,它接受一个字符串并返回一个字符串,其中每个单词的第一个字母都大写。
我试图只传递全部大写或全部小写的地址,但它返回的是整个数据集。前 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)
我正在尝试创建一个存储过程,但收到此错误:
消息 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
笔记:
select * from table问题仍然存在。sql-server-2019 ×10
sql-server ×8
sql ×5
c# ×1
docker ×1
json ×1
sqlclr ×1
ssis ×1
t-sql ×1
where-clause ×1