繁体   English   中英

sql查询不打印

[英]sql query not printing

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

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**

非常感谢

您正在将字符串值添加到空值( @CGNEEPK ),这将导致NULL 当您打印NULL ,您什么都看不到。 你需要使用ISNULL(@CGNEEPK, '')

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

改成

SET @CGNEEPK= '' 

如果在SQL中将NULL连接到字符串,则整个字符串将为NULL。 更改

SET @CGNEEPK= NULL

SET @CGNEEPK= ''

听起来像@CGNEEPK的空连接问题,因为你将它设置为NULL。 对于他们的所有参数,或者设置为@CGNEEPK =''

SET @SQL = '     
SELECT        
PUBLISHER 
FROM CLIENT_SHIPPINGREPORTDATA_FUNCTION(' 
  + ISNULL(@CLIENTPK_NEW, '') + ' , '  
  + ISNULL(@CGNEEPK, '') + ' , '  
  + ISNULL(@TYPE, '') +' )' 

PRINT  @SQL    <== **Why is this not priniting** 

澄清一下,因为看起来太愚蠢了:

PRINT '(1) This is ODD, ' + NULL +' very.'
PRINT '(2) This is ODD, ' + ISNULL(NULL,'') +' very.'

仅显示以下内容:

(2) This is ODD  very.

从(1)开始的整个第一行被省略!

在null问题之后(由许多其他人回答),您可能会查看@TYPE变量。 这是一个字符串('Mag'),所以你需要围绕该值和其他字符串的引号:

SET @SQL = '    
SELECT       
PUBLISHER
FROM CLIENT_SHIPPINGREPORTDATA_FUNCTION('''
  + @CLIENTPK_NEW + ''' , ''' 
  + isnull(@CGNEEPK, '') + ''' , ''' 
  + @TYPE +''' )'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM