SQL拼接字符串与变量时返回NULL的问题求助
SQL拼接字符串与变量时返回NULL的问题求助
嘿,我看你在SQL里拼接字符串和变量的时候遇到了返回NULL的问题,咱们一步步拆解解决它!
首先,你得到NULL的核心原因很明确:你声明了@isDelta变量,但没有给它赋值。在SQL的字符串拼接逻辑里,只要参与拼接的任意一个值是NULL,整个拼接结果就会变成NULL。你代码里的CAST(@isDelta AS nvarchar(1))是NULL,直接导致整个@param变量变成了NULL。
另外,手动拼接JSON还有几个隐形的坑:比如日期格式转字符串可能不符合JSON规范,或者遇到特殊字符时容易破坏JSON结构。再加上你提到前半段的JSON内容来自另一个变量,咱们可以用更可靠的方式来实现需求。
解决方案1:修复手动拼接的问题
先给@isDelta赋值,同时用STRING_ESCAPE处理日期字符串,避免JSON格式错误:
DECLARE @startTS datetime2(3) = DATEADD(MI, -20, GETDATE()) DECLARE @param nvarchar(max), @runID char(36) , @isDelta char(1) -- 先给@isDelta赋值,比如你想要的'1' SET @isDelta = '1' -- 用STRING_ESCAPE确保日期字符串符合JSON转义要求 SET @param = '{"SourceDatabase":"DWH", "SourceSchema":"dbo","SourceTable":"LU_ERs","TargetDatabase":"ADrS","TargetSchema":"ofr","TargetTable":"LU_ERs"' +',"isDelta":"' + CAST(@isDelta AS nvarchar(1)) + '"' +',"startTS":"' + STRING_ESCAPE(CAST(@startTS AS nvarchar(50)), 'json') + '"}' SELECT @param
解决方案2:用FOR JSON PATH自动生成JSON(更推荐)
手动拼接JSON很容易出错,SQL Server提供了FOR JSON PATH语法可以自动生成规范的JSON,还能自动处理转义和格式问题。如果前半段JSON来自另一个变量,比如@baseParam,咱们可以这么写:
DECLARE @startTS datetime2(3) = DATEADD(MI, -20, GETDATE()) -- 假设这是你提到的来自其他变量的基础JSON DECLARE @baseParam nvarchar(max) = '{"SourceDatabase":"DWH", "SourceSchema":"dbo","SourceTable":"LU_ERs","TargetDatabase":"ADrS","TargetSchema":"ofr","TargetTable":"LU_ERs"}' DECLARE @isDelta char(1) = '1' -- 把基础JSON解析成字段,再添加新参数,最后生成完整JSON SELECT JSON_VALUE(@baseParam, '$.SourceDatabase') AS SourceDatabase, JSON_VALUE(@baseParam, '$.SourceSchema') AS SourceSchema, JSON_VALUE(@baseParam, '$.SourceTable') AS SourceTable, JSON_VALUE(@baseParam, '$.TargetDatabase') AS TargetDatabase, JSON_VALUE(@baseParam, '$.TargetSchema') AS TargetSchema, JSON_VALUE(@baseParam, '$.TargetTable') AS TargetTable, @isDelta AS isDelta, @startTS AS startTS FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
这种方式生成的JSON完全符合规范,还不用手动处理拼接细节,再也不用担心出现NULL或者格式错误的问题啦。
备注:内容来源于stack exchange,提问作者Selaire Kollou N'dri
相关产品推荐
相关产品推荐

