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