Iam尝试执行动态查询,但是我得到空输出。我哪里错了?
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)
数据类型声明的输入参数。当我打印时,它们是动态的,我什么都没得到。
答案 0 :(得分:2)
因为您没有执行查询而是打印它 这和 3 + 3 = 6和“3”+“3”=“33”
动态查询通常像这样(最简单的方法)执行
if let playerItem = player.currentItem, playerItem.status == AVPlayerItemStatus.readyToPlay {
let durationTime = playerItem.duration
//playerItem.loadedTimeRanges[0].timeRangeValue.duration
}
答案 1 :(得分:1)
案例#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。相反,你可以直接去像这样
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
答案 2 :(得分:1)
对我来说效果很好
declare @val nvarchar(100) = 'tommy can you see me'
declare @SQL nvarchar(100) = N'SELECT GETDATE(), ''' + @val + '''';
PRINT(@SQL);