sql 引号问题!大家帮帮忙啊.

jackyhyoung 2006-01-04 04:56:37
我写了一个procedure,代码如下:
create procedure t_getIntoJob
@User_cd varchar(50),
@StartDate varchar(50),
@EndDate varchar(50),
@Purpose varchar(50),
@ModiUser varchar(50),
@Address varchar(100)
as

declare @job_cd varchar(10)
declare @job_cd_len varchar(10)
declare @intLen int
declare @updateflag varchar(10)
declare @intJobNewCD int
declare @strNewCd varchar(10)
declare @ssql varchar(500)

set @job_cd_len='0000000000'
select @job_cd=job_cd from t_job_cd

set @updateflag=isnull(@job_cd,'null')

set @job_cd=isnull(@job_cd,@job_cd_len)
/*获得新CD的字符长度*/
set @intJobNewCD=cast(@job_cd as int)+1
set @intLen=len(@intJobNewCD)
set @strNewCd=cast(@intJobNewCD as varchar(10))
set @strNewCD=stuff(@job_cd_len,10-@intLen+1,10,@strNewCd)
if @updateflag='null'
insert into t_job_cd values(@strnewcd)
else
update t_job_cd set job_cd=@strNewCD

INSERT INTO T_JOB(JOB_CD, USER_CD, START_DATE, END_DATE, TOPIC, FINISHED_FLAG,PRI_FLAG, OUT_FLAG,CONTENT,CRE_CD,CRE_DATE)
VALUES(''''+ @strNewCD + ''','+@USER_CD+','+@StartDate+','+ @EndDate + ',' + @Purpose + ''','',''1'',''2'','''+@Address +','+ @modiUser + ','+ getdate() +'')
--print @ssql

end

报错说我的插入语句有问题!大家帮帮忙,,我不知道如何改啊?
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyhyoung 2006-01-05
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_getIntoJob]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[t_getIntoJob]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

create procedure t_getIntoJob
@User_cd varchar(50),
@StartDate varchar(50),
@StartDateFlag int,
@EndDateFlag int,
@EndDate varchar(50),
@Purpose varchar(50),
@ModiUser varchar(50),
@Address varchar(100)
as
declare @ssql varchar(500)
declare @job_cd varchar(10)
declare @job_cd_len varchar(10)
declare @intLen int
declare @updateflag varchar(10)
declare @intJobNewCD int
declare @strNewCd varchar(10)
declare @intdays int
begin

set @intdays=datediff(dd,@StartDate,@EndDate)
set @intdays=2
while @intdays>0
begin
set @job_cd_len='0000000000'
select @job_cd=job_cd from t_job_cd

set @updateflag=isnull(@job_cd,'null')

set @job_cd=isnull(@job_cd,@job_cd_len)
/*获得新CD的字符长度*/
print @job_cd
set @intJobNewCD=cast(@job_cd as int)+1
set @intLen=len(@intJobNewCD)
set @strNewCd=cast(@intJobNewCD as varchar(10))
set @strNewCD=stuff(@job_cd_len,10-@intLen+1,10,@strNewCd)
if @updateflag='null'
insert into t_job_cd values(@strnewcd)
else
update t_job_cd set job_cd=@strNewCD

set @ssql='INSERT INTO T_JOB(JOB_CD, USER_CD, START_DATE, END_DATE, TOPIC, FINISHED_FLAG,PRI_FLAG, OUT_FLAG,CONTENT,CRE_CD,CRE_DATE) VALUES('''+ @strNewCD + ''','''+@User_cd+''','''+@StartDate+''','''+ @EndDate + ''',''' + @Purpose + ''','''',''1'',''2'','''+@Address +''','''+ @modiUser + ''','''')'

exec @ssql
set @intdays=@intdays-1
end
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

我改成这样..
然后运行.exec t_getIntoJob '','2005-12-02','','2005-12-04','','','',''
为什么总说我

服务器: 消息 8114,级别 16,状态 4,过程 t_getIntoJob,行 0
将数据类型 varchar 转换为 int 时出错。
新鲜鱼排 2006-01-05
  • 打赏
  • 举报
回复
INSERT INTO T_JOB(
JOB_CD,
USER_CD,
START_DATE,
END_DATE,
TOPIC,
FINISHED_FLAG,
PRI_FLAG,
OUT_FLAG,
CONTENT,
CRE_CD,
CRE_DATE)
VALUES(
''''+ @strNewCD + ''',
'''+@USER_CD+''',
'''+@StartDate+''',
'''+ @EndDate + ''',
''' + @Purpose + ''',
'''',
'''+'1'+''',
'''+'2'+''',
'''+@Address +''',
'''+ @modiUser + ''',
'''+ cast(getdate() as varchar(30)) +'''')
casting 2006-01-05
  • 打赏
  • 举报
回复
if @updateflag='null'
修改为:if @updateflag is null
mislrb 2006-01-04
  • 打赏
  • 举报
回复
除了上面的SQL语句改之外,你的最后一句END和什么对应啊,BEGIN跑哪去了
zlp321002 2006-01-04
  • 打赏
  • 举报
回复
你仔细检查下,字段个数还有数据类型一致就可以了。
lw1a2 2006-01-04
  • 打赏
  • 举报
回复
@ssql='INSERT INTO T_JOB(JOB_CD, USER_CD, START_DATE, END_DATE, TOPIC, FINISHED_FLAG,PRI_FLAG, OUT_FLAG,CONTENT,CRE_CD,CRE_DATE)
VALUES('''+ @strNewCD + ''','''+@USER_CD+''','''+@StartDate+''','''+ @EndDate + ''',''' + @Purpose + ''','''',''1'',''2'','''+@Address +''','''+ @modiUser + ''','''+ cast(getdate() as varchar(30)) +''')'

exec(@ssql)
jackyhyoung 2006-01-04
  • 打赏
  • 举报
回复
奇怪还是有问题啊..
提示说服务器: 消息 109,级别 15,状态 1,过程 t_getIntoJob,行 35
INSERT 语句中列的数目大于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。
这是怎么回事啊..都是11项..已经对应了.
OracleRoob 2006-01-04
  • 打赏
  • 举报
回复

INSERT INTO T_JOB(JOB_CD, USER_CD, START_DATE, END_DATE, TOPIC, FINISHED_FLAG,PRI_FLAG, OUT_FLAG,CONTENT,CRE_CD,CRE_DATE)
VALUES(''''+ @strNewCD + ''','''+@USER_CD+''','''+@StartDate+''','''+ @EndDate + ''',''' + @Purpose + ''','''',''1'',''2'','''+@Address +''','''+ @modiUser + ''','''+ cast(getdate() as varchar(30)) +'''')

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧