提问人:stranges 提问时间:5/16/2023 更新时间:5/16/2023 访问量:38
字符串中为 NULL 的 MSSQL CONCAT
MSSQL CONCAT with NULL in string
问:
我不需要将参数发送到函数中,并且我动态生成代码。 如果变量类型为 INTEGER 且值为 NULL,则我有“”,但我需要“null”。 请帮我找到正常的决定:
DECLARE @a INT = NULL, @b INT = 5;
SELECT CONCAT('SELECT dbo.fncName(',@a,',',@b,')') AS Result;
--result "SELECT dbo.fncName(,5)",
--I need: "SELECT dbo.fncName(NULL,5)"
GO
-- it works, but it looks very bad:
DECLARE @a INT = NULL, @b INT = 5;
DECLARE @a1 VARCHAR(16) = IIF(CAST(@a AS VARCHAR(16)) IS NULL,'NULL',CAST(@a AS VARCHAR(16)));
SELECT CONCAT('SELECT dbo.fncName(',@a1,',',@b,')') AS Result;
--result "SELECT dbo.fncName(NULL,5)"
答:
1赞
Charlieface
5/16/2023
#1
为此,您需要动态 SQL。您可以使用sp_executesql
DECLARE @a INT = NULL, @b INT = 5;
DECLARE @sql nvarchar(max) = CONCAT(
'SELECT dbo.',
QUOTENAME(@procName),
'(@a, @b) AS Result;'
);
EXEC sp_executesql @sql,
N'@a int, @b int',
@a = @a,
@b = @b;
甚至更好的是:标量函数实际上可以像过程一样直接调用。
DECLARE @a INT = NULL, @b INT = 5, @result INT;
EXEC @result = @procName
@a = @a,
@b = @b;
SELECT @result AS Result;
评论