获得空输出

时间:2018-03-07 13:08:37

标签: sql-server sql-server-2008 sql-server-2008-r2

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)数据类型声明的输入参数。当我打印时,它们是动态的,我什么都没得到。

3 个答案:

答案 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

给我这个

enter image description here

所以使用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);