[英]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.