我试图运行动态查询,但由于一些奇怪的原因它没有运行.它甚至不打印.请任何人都可以告诉我为什么下面的动态查询不打印.
DECLARE @CLIENTPK_NEW AS VARCHAR(50)
DECLARE @CGNEEPK AS VARCHAR(50)
DECLARE @TYPE AS VARCHAR(10)
SET @CLIENTPK_NEW='6EF77AAA-1A7B-4D03-A448-D1088DED4134'
SET @CGNEEPK= NULL
SET @TYPE='Mag'
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = '
SELECT
PUBLISHER
FROM CLIENT_SHIPPINGREPORTDATA_FUNCTION('
+ @CLIENTPK_NEW + ' , '
+ @CGNEEPK + ' , '
+ @TYPE +' )' <=== This is the troubled line, but not sure what is error is.
PRINT @SQL <== **Why is this not priniting**
Run Code Online (Sandbox Code Playgroud)
非常感谢
正如Noel所说,这是因为你试图将NULL连接成VARCHAR - 最终结果将是NULL.您还需要将其他varchar值括在单引号中以传入它们,这会开始变得混乱/有问题.
请改用参数化的TSQL.这将允许您轻松地将NULL传递给您的函数,以及帮助防止SQL注入.
DECLARE @CLIENTPK_NEW AS VARCHAR(50)
DECLARE @CGNEEPK AS VARCHAR(50)
DECLARE @TYPE AS VARCHAR(10)
SET @CLIENTPK_NEW='6EF77AAA-1A7B-4D03-A448-D1088DED4134'
SET @CGNEEPK= NULL
SET @TYPE='Mag'
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = '
SELECT
PUBLISHER
FROM CLIENT_SHIPPINGREPORTDATA_FUNCTION(
@CLIENTPK_NEW, @CGNEEPK, @TYPE)'
-- Then to execute it:
EXECUTE sp_executesql @SQL,
N'@CLIENTPK_NEW VARCHAR(50), @CGNEEPK VARCHAR(50), @TYPE VARCHAR(10)',
@CLIENTPK_NEW, @CGNEEPK, @TYPE
Run Code Online (Sandbox Code Playgroud)