获得空输出
Getting Empty Output
我正在尝试执行动态查询,但我变空了Output.Where我错了吗?
SET @SQL=N'
SELECT GETDATE(),'+@AMUID+','+ @BNO +
',LOT,BARCODEID,'+@ACTWT+',TARE_QUANTITY,''NA'',STAGE,0,0,0,
'+ @UNAME+ ','+@PR + ',GETDATE()
FROM DISPENSE_HOLD_START WHERE BATCH_NO='''+@BNO+''' AND BARCODEID='''+
@BARID +''' and IS_OUT=0';
PRINT(@SQL)
这里 @AMUID,@BNO,@ACTWT etc
是用 NVARCHAR(MAX)
数据声明的输入参数 type.They 是动态的 我打印这个时什么也得不到。
因为您不是在执行查询而是在打印它
这与
3+3=6 和 "3"+"3"="33"
动态查询通常这样执行(最简单的方法)
DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
/* Build the SQL string one time.*/
SET @SQLString =
N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID
FROM AdventureWorks2012.HumanResources.Employee
WHERE BusinessEntityID = @BusinessEntityID';
SET @ParmDefinition = N'@BusinessEntityID tinyint';
/* Execute the string with the first parameter value. */
SET @IntVariable = 197;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 109;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
案例#1 :
在您的上述查询中,您使用的是 PRINT
而不是 EXEC
。所以请确保您在实际代码中执行查询
EXEC(@SQL)
案例#2 :
如果你正在执行这个,有可能如果任何参数值是NULL
,那么整个字符串将变成NULL
如果您向 NULL
添加任何值,结果将是 NULL
SELECT
'ABC',
'ABC'+NULL
给我这个
所以使用ISNULL
SET @SQL = N'
SELECT
GETDATE(),
'+ISNULL(@AMUID,'')+','+ISNULL(@BNO,'')+',LOT,
BARCODEID,'+ISNULL(@ACTWT,'')+',TARE_QUANTITY,''NA'',STAGE,0,0,0,
'+ISNULL(@UNAME,'')+','+ISNULL(@PR,'')+',GETDATE()
FROM DISPENSE_HOLD_START
WHERE BATCH_NO='''+ISNULL(@BNO,'')+'''
AND BARCODEID='''+ISNULL(@BARID,'')+'''
and IS_OUT=0';
EXEC(@SQL);
案例#3
查看您的代码,我认为您在这里不需要动态 SQL。相反,你可以直接去 Like this
SELECT
GETDATE(),
@AMUID,
@BNO,
LOT,
BARCODEID,
@ACTWT,
TARE_QUANTITY,
'NA',
STAGE,
0,
0,
0,
@UNAME,
@PR,
GETDATE()
FROM DISPENSE_HOLD_START
WHERE BATCH_NO = @BNO
AND BARCODEID = @BARID
AND IS_OUT = 0
对我来说效果很好
declare @val nvarchar(100) = 'tommy can you see me'
declare @SQL nvarchar(100) = N'SELECT GETDATE(), ''' + @val + '''';
PRINT(@SQL);
我正在尝试执行动态查询,但我变空了Output.Where我错了吗?
SET @SQL=N'
SELECT GETDATE(),'+@AMUID+','+ @BNO +
',LOT,BARCODEID,'+@ACTWT+',TARE_QUANTITY,''NA'',STAGE,0,0,0,
'+ @UNAME+ ','+@PR + ',GETDATE()
FROM DISPENSE_HOLD_START WHERE BATCH_NO='''+@BNO+''' AND BARCODEID='''+
@BARID +''' and IS_OUT=0';
PRINT(@SQL)
这里 @AMUID,@BNO,@ACTWT etc
是用 NVARCHAR(MAX)
数据声明的输入参数 type.They 是动态的 我打印这个时什么也得不到。
因为您不是在执行查询而是在打印它 这与 3+3=6 和 "3"+"3"="33"
动态查询通常这样执行(最简单的方法)
DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
/* Build the SQL string one time.*/
SET @SQLString =
N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID
FROM AdventureWorks2012.HumanResources.Employee
WHERE BusinessEntityID = @BusinessEntityID';
SET @ParmDefinition = N'@BusinessEntityID tinyint';
/* Execute the string with the first parameter value. */
SET @IntVariable = 197;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 109;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
案例#1 :
在您的上述查询中,您使用的是 PRINT
而不是 EXEC
。所以请确保您在实际代码中执行查询
EXEC(@SQL)
案例#2 :
如果你正在执行这个,有可能如果任何参数值是NULL
,那么整个字符串将变成NULL
如果您向 NULL
添加任何值,结果将是 NULL
SELECT
'ABC',
'ABC'+NULL
给我这个
所以使用ISNULL
SET @SQL = N'
SELECT
GETDATE(),
'+ISNULL(@AMUID,'')+','+ISNULL(@BNO,'')+',LOT,
BARCODEID,'+ISNULL(@ACTWT,'')+',TARE_QUANTITY,''NA'',STAGE,0,0,0,
'+ISNULL(@UNAME,'')+','+ISNULL(@PR,'')+',GETDATE()
FROM DISPENSE_HOLD_START
WHERE BATCH_NO='''+ISNULL(@BNO,'')+'''
AND BARCODEID='''+ISNULL(@BARID,'')+'''
and IS_OUT=0';
EXEC(@SQL);
案例#3
查看您的代码,我认为您在这里不需要动态 SQL。相反,你可以直接去 Like this
SELECT
GETDATE(),
@AMUID,
@BNO,
LOT,
BARCODEID,
@ACTWT,
TARE_QUANTITY,
'NA',
STAGE,
0,
0,
0,
@UNAME,
@PR,
GETDATE()
FROM DISPENSE_HOLD_START
WHERE BATCH_NO = @BNO
AND BARCODEID = @BARID
AND IS_OUT = 0
对我来说效果很好
declare @val nvarchar(100) = 'tommy can you see me'
declare @SQL nvarchar(100) = N'SELECT GETDATE(), ''' + @val + '''';
PRINT(@SQL);