Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取空输出_Sql Server_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql server 获取空输出

Sql server 获取空输出,sql-server,sql-server-2008,sql-server-2008-r2,Sql Server,Sql Server 2008,Sql Server 2008 R2,我试图执行动态查询,但得到的是空输出。我错在哪里 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='''+ @B

我试图执行动态查询,但得到的是空输出。我错在哪里

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等
是使用
NVARCHAR(MAX)
数据类型声明的输入参数。它们是动态的,当我打印时,我什么也得不到。

因为您不是在执行查询,而是在打印它 这和 3+3=6和“3+3=33”

动态查询通常是这样执行的(最简单的方法)


因为您不是在执行查询,而是在打印它 这和 3+3=6和“3+3=33”

动态查询通常是这样执行的(最简单的方法)

案例1:

在上述查询中,您使用的是
PRINT
而不是
EXEC
。因此,请确保在实际代码中执行查询

EXEC(@SQL)
案例2:

如果执行此操作,则有可能出现以下情况:如果任何参数值为
NULL
,则整个字符串将变为
NULL

SELECT
    'ABC',
    'ABC'+NULL
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);
如果向
NULL
添加任何值,结果将是
NULL

SELECT
    'ABC',
    'ABC'+NULL
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);
给我这个

所以使用
ISNULL

SELECT
    'ABC',
    'ABC'+NULL
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
案例1:

在上述查询中,您使用的是
PRINT
而不是
EXEC
。因此,请确保在实际代码中执行查询

EXEC(@SQL)
案例2:

如果执行此操作,则有可能出现以下情况:如果任何参数值为
NULL
,则整个字符串将变为
NULL

SELECT
    'ABC',
    'ABC'+NULL
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);
如果向
NULL
添加任何值,结果将是
NULL

SELECT
    'ABC',
    'ABC'+NULL
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);
给我这个

所以使用
ISNULL

SELECT
    'ABC',
    'ABC'+NULL
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

对我来说很好

declare @val nvarchar(100) = 'tommy can you see me'
declare @SQL nvarchar(100) = N'SELECT GETDATE(), ''' + @val + '''';
PRINT(@SQL); 

对我来说很好

declare @val nvarchar(100) = 'tommy can you see me'
declare @SQL nvarchar(100) = N'SELECT GETDATE(), ''' + @val + '''';
PRINT(@SQL); 

您正在打印形成的sql语句,而不是执行它。是否有空值参数?@PawanKumar nopeAnyone您的输入参数中有一个为空,这将使结束字符串为空,并且不会打印任何内容。您需要在此处使用参数化sql,而不仅仅是构建字符串并执行它。您正在打印形成的sql语句,不执行。是否有空值参数?@PawanKumar nopeAnyone您的输入参数中有一个为空,这会使结束字符串为空,并且不会打印任何内容。您需要在此处使用参数化sql,不仅仅是建立一个字符串并执行它。这里我必须在表名为动态的表中插入数据。但是我没有在Select本身中获取数据,所以我发布了此消息。那么您的问题可能落在案例上。这里我必须在表名为动态的表中插入数据。但是我没有在Select本身中获取数据,所以我发布了此消息因此,您的问题可能属于案例2