sql查询不打印

Ami*_*mit 4 sql sql-server

我试图运行动态查询,但由于一些奇怪的原因它没有运行.它甚至不打印.请任何人都可以告诉我为什么下面的动态查询不打印.

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)

非常感谢

Dan*_*haw 9

您正在将字符串值添加到空值(@CGNEEPK),这将导致NULL.打印时NULL,什么也看不见.你需要ISNULL(@CGNEEPK, '')改用.


Ada*_*Dev 5

正如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)