存储过程出了点问题?不知道那里错了?

[复制链接]
查看11 | 回复3 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
我的表结构是这样的:
SQL code
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[attend]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[attend]
GO
CREATE TABLE [dbo].[attend] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[startdate] [datetime] NOT NULL ,
[enddate] [datetime] NOT NULL ,
[eid] [int] NOT NULL ,
[late] [int] NULL ,
[brea] [int] NULL ,
[leave] [int] NULL ,
[neg] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[attend] WITH NOCHECK ADD
CONSTRAINT [PK_attend] PRIMARY KEYCLUSTERED
(
[id]
)ON [PRIMARY]
GO


我要根据输入的条件来查询信息,
有3中情况:
1 只输入eid;
2只输入startdate,和enddate;3eid,startdate,enddate都输入。
我的存储过程如下:
SQL code
IF EXISTS( SELECT * FROM sysobjects WHERE name='attendances_select_countByState_proc' )
DROP PROCEDURE attendances_select_countByState_proc
GO
CREATE PROCEDURE attendances_select_countByState_proc
@eid nvarchar(20),
@start datetime,
@end datetime
AS
DECLARE @sql nvarchar(1000)
SET @sql='SELECT * FROM attend WHERE startdate>='+@start+' AND enddate0)
BEGIN
SET @sql=@sql+' AND eid='+@eid
END
END
EXEC(@sql)
GO


但是有错误,“服务器: 消息 241,级别 16,状态 1,过程 attendances_select_countByState_proc,行 17
从字符串转换为 datetime 时发生语法错误。”
怎么解决啊?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
你怎么能把datetime类型的参数拼进SQL语句里,,,拼进去的时候要转换成字符型
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SET @sql='SELECT * FROM attend WHERE startdate>='''+@start+''' AND enddate='''+@start+''' AND enddate='+char(39)+@start+char(39)
+' AND enddate<='+char(39)+@end+char(39)
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
总之,在exec(@sql)中调用的变量,全部要显式地转变为字符串才可以,特别是数值型和日期型的,
要在单引号中显示一个单引号,应写成''
即 select''''
显示'
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行