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
有什么问题?
答案 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;