|M| 存储过程出错:从字符串转换为 datetime 时发生语法错误。
CREATE Procedure Search(@OrderID int, @MemberID int, @TypeClass nvarchar(8), @MyDayBegin datetime, @MyDayEnd datetime)
AS
Declare @sql nvarchar(1000)
Declare @iWhere nvarchar(1000)
Set @sql= 'SELECT * FROM Order '
Set @iWhere= ' Where 1=1 '
if @OrderID <> -1
Begin
Set @iWhere=@iWhere + 'And OrderID = ' + convert(nvarchar,@OrderID)
End
if @MemberID <> -1
Begin
Set @iWhere=@iWhere + 'And MemberID = ' + convert(nvarchar,@MemberID)
End
if @TypeClass <> ' '
Begin
Set @iWhere=@iWhere + 'And TypeClass = ' ' ' + @TypeClass + ' ' ' '
End
if @MyDayBegin <> convert(datetime, '1900-1-1 ')
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + @MyDayBegin + ' ' ') <= 0 '
End
if @MyDayEnd <> convert(datetime, '1900-1-1 ')
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + @MyDayEnd + ' ' ') > =0 '
End
Set @sql=@sql + @iWhere
Execute sp_executesql @sql
GO
------------------------
提示:从字符串转换为 datetime 时发生语法错误。
还有上面我写的存储过程请大家忧化一下
谢谢
[解决办法]
@MyDayBegin <> convert(datetime, '1900-1-1 ') 改成 @MyDayBegin <> '1900-1-1 '
@MyDayEnd <> convert(datetime, '1900-1-1 ') 改成 @MyDayEnd <> '1900-1-1 '
建议: <> 改成>
[解决办法]
是传参数就报错了,还是执行存储过程的时候出错,如果是执行的时候才出错,执行到那行代码的时候出错?
[解决办法]
添加print语句,调试一下就好了
或者使用VS自带的连接数据库的功能,可以进行断电调试的
[解决办法]
UP下,给出详细的错误提示吧呵呵
[解决办法]
没测试,先发一个
CREATE Procedure Search
(
@OrderID int,
@MemberID int,
@TypeClass nvarchar(8),
@MyDayBegin datetime,
@MyDayEnd datetime
)
AS
Declare @sql nvarchar(1000)
Declare @iWhere nvarchar(1000)
Set @sql= 'SELECT * FROM Order '
Set @iWhere= ' Where 1=1 '
if @OrderID <> -1
Begin
Set @iWhere = @iWhere + ' And OrderID = ' + convert(nvarchar,@OrderID)
End
if @MemberID <> -1
Begin
Set @iWhere = @iWhere + ' And MemberID = ' + convert(nvarchar,@MemberID)
End
if @TypeClass <> ' '
Begin
Set @iWhere = @iWhere + ' And TypeClass = ' ' ' + @TypeClass + ' ' ' '
End
if @MyDayBegin <> '1900-1-1 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + Convert(nvarchar(20),@MyDayBegin) + ' ' ') <= 0 '
End
if @MyDayEnd <> '1900-1-1 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + Convert(nvarchar(20),@MyDayEnd) + ' ' ') > =0 '
End
Set @sql = @sql + @iWhere
Execute sp_executesql @sql
所有的and 前面加空格
[解决办法]
你这个应该是程序出现问题把,存储过程好像没有错啊
[解决办法]
@MyDayEnd 的类型是DateTime ,你要确定在代码中传来的数据是不是也是DateTime类型的,还是string 的。感觉存储过程没有错,错的是.cs页面中的@MyDayEnd 的类型,是不是没有把string 转换为DateTime ? string date; Parrimeter[ "@MyDayEnd "].Value=Convert.toDateTime( "date ");
[解决办法]
zyciis291()
amandag(高歌)
说的对
[解决办法]
convert(nvarchar(8),@OrderID) 你要保证@OrderID不会超过8个字节
[解决办法]
像这里
convert(nvarchar,@OrderID)
是不是改为
convert(nvarchar(8),@OrderID)
会更好
----------
不,假如你的 @ORderId = 100000000,哈刚好报错了,发生了截断,
如果你要显示指定 var 类型的长度,一定要确保不会发生截断