转换nvarchar值时转换失败' 2016-03-01'到数据类型int

时间:2016-03-31 02:39:14

标签: sql sql-server

alter procedure sp1GetPricesByIteIdUserDateOccupancyNoOfPersons
    --@IteId nvarchar(50),
    @Occupancy nvarchar(50),
    @UserDate varchar(50)
    --@NoOfPersons nvarchar(50)
AS
BEGIN
    --SET NOCOUNT ON;
    DECLARE @DynamicSQL nvarchar(4000)

    SET @DynamicSQL = 'SELECT ['+@Occupancy+'] FROM Tbl_ItineraryDetails where '+@UserDate+' between [From Date] and [To Date]'

    EXECUTE sp_executesql @DynamicSQL
END

我收到错误

  

转换nvarchar值时转换失败' 2016-03-01'到数据类型int

有什么问题?

1 个答案:

答案 0 :(得分:2)

很可能,问题是字符串package absences; import java.util.Scanner; /** * * @author Matthew */ public class Absences { /** * @param args the command line arguments */ public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); System.out.println("Enter the date."); int a = keyboard.next().charAt(0); int[] mArray; mArray = new int[32]; mArray[0] = 0; mArray[1] = 1; mArray[2] = 0; mArray[3] = 3; mArray[4] = 0; mArray[5] = 2; mArray[6] = 1; mArray[7] = 0; mArray[8] = 0; mArray[9] = 0; mArray[10] = 0; mArray[11] = 0; mArray[12] = 0; mArray[13] = 0; mArray[14] = 0; mArray[15] = 0; mArray[16] = 0; mArray[17] = 0; mArray[18] = 0; mArray[19] = 0; mArray[20] = 0; mArray[21] = 0; mArray[22] = 0; mArray[23] = 0; mArray[24] = 0; mArray[25] = 0; mArray[26] = 0; mArray[27] = 0; mArray[28] = 0; mArray[29] = 0; mArray[30] = 0; mArray[31] = 2; System.out.println("On the Date " + a + "has " + + " absences" ); 中的日期格式。您将值直接放在查询字符串中,并且它周围没有引号。因此,除非它是列名或包含单引号分隔符,否则查询可能会生成错误。

您正在使用@UserDate,因此请使用参数。这是使用它的一个主要原因:

sp_executesql

编辑:

鉴于错误,您可能想要传递日期:

alter procedure sp1GetPricesByIteIdUserDateOccupancyNoOfPersons (
    --@IteId nvarchar(50),
    @Occupancy nvarchar(50),
    @UserDate varchar(50)
    --@NoOfPersons nvarchar(50)
AS
BEGIN
    --SET NOCOUNT ON;
    DECLARE @DynamicSQL nvarchar(4000)

    SET @DynamicSQL = 'SELECT ['+@Occupancy+'] FROM Tbl_ItineraryDetails where @UserDate between [From Date] and [To Date]';

    EXECUTE sp_executesql @DynamicSQL, N'@UserDate nvarchar(50)', @UserDate = @UserDate;
END;