我正在尝试运行动态查询,但由于一些奇怪的原因,它没有运行。它甚至不打印。请任何人都可以告诉我为什么下面的动态查询不能打印。
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**
非常感谢
答案 0 :(得分:9)
您正在将字符串值添加到空值(@CGNEEPK
),这会产生NULL
。当您打印NULL
时,您什么也看不见。您需要改为使用ISNULL(@CGNEEPK, '')
。
答案 1 :(得分: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
答案 2 :(得分:2)
更改为
SET @CGNEEPK= ''
答案 3 :(得分:1)
如果在SQL中将NULL连接到字符串,则整个字符串将为NULL。变化
SET @CGNEEPK= NULL
到
SET @CGNEEPK= ''
答案 4 :(得分:1)
听起来像@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**
答案 5 :(得分:0)
在出现null问题之后(很多其他人回答),您可能会查看@TYPE变量。这是一个字符串('Mag'),所以你需要围绕该值和其他字符串的引号:
SET @SQL = '
SELECT
PUBLISHER
FROM CLIENT_SHIPPINGREPORTDATA_FUNCTION('''
+ @CLIENTPK_NEW + ''' , '''
+ isnull(@CGNEEPK, '') + ''' , '''
+ @TYPE +''' )'
答案 6 :(得分:0)
澄清一下,因为看起来太愚蠢了:
PRINT '(1) This is ODD, ' + NULL +' very.'
PRINT '(2) This is ODD, ' + ISNULL(NULL,'') +' very.'
仅显示此内容:
(2) This is ODD very.
从(1)开始的整个第一行被省略!