执行以下存储过程出错
exec jysc 'CQ0901,2,CQ0902,6,BJ0908,10'提示的出错信息为:
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'CQ0901'。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'CQ0902'。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'BJ0908'。此处只允许使用常量、表达式或变量。不允许使用列名。(所影响的行数为 0 行)存储过程的本意是将以上参数保存到临时表#tab中,格式如下
bh sl
CQ0901 2
CQ0902 6
BJ0908 10
ALTER procedure [dbo].[jysc]
@fld_ddh varchar(3000)
as
create table #tab(bh varchar(30) null,sl float null)
declare @sql varchar(1000),@bh varchar(30),@i_len int,@i_len2 floatif right(@fld_ddh,1)<>','
set @fld_ddh=@fld_ddh+','WHILE CHARINDEX(',',@fld_ddh)>0
BEGIN
set @i_len=CHARINDEX(',',@fld_ddh)
set @i_len2=charindex(',',@fld_ddh,@i_len)
set @bh=left(@fld_ddh,@i_len-1)
set @sl=substring(@fld_ddh,@i_len+1,@i_len2-@i_len-1)
set @fld_ddh=right(@fld_ddh,len(@fld_ddh) - @i_len2)
set @sql='INSERT INTO #tab(bh,sl) VALUES (@bh,@sl)'
exec(@sql)
END
select * from #tab
exec jysc 'CQ0901,2,CQ0902,6,BJ0908,10'提示的出错信息为:
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'CQ0901'。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'CQ0902'。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'BJ0908'。此处只允许使用常量、表达式或变量。不允许使用列名。(所影响的行数为 0 行)存储过程的本意是将以上参数保存到临时表#tab中,格式如下
bh sl
CQ0901 2
CQ0902 6
BJ0908 10
ALTER procedure [dbo].[jysc]
@fld_ddh varchar(3000)
as
create table #tab(bh varchar(30) null,sl float null)
declare @sql varchar(1000),@bh varchar(30),@i_len int,@i_len2 floatif right(@fld_ddh,1)<>','
set @fld_ddh=@fld_ddh+','WHILE CHARINDEX(',',@fld_ddh)>0
BEGIN
set @i_len=CHARINDEX(',',@fld_ddh)
set @i_len2=charindex(',',@fld_ddh,@i_len)
set @bh=left(@fld_ddh,@i_len-1)
set @sl=substring(@fld_ddh,@i_len+1,@i_len2-@i_len-1)
set @fld_ddh=right(@fld_ddh,len(@fld_ddh) - @i_len2)
set @sql='INSERT INTO #tab(bh,sl) VALUES (@bh,@sl)'
exec(@sql)
END
select * from #tab
解决方案 »
- SQL格式化的问题
- SQL问题,如何查询含有数字的语句?
- TSQL debug: 高手请进
- SQL Server 2005示例数据库的问题,AdventureworkstoGo
- 关于SQL2005发布和订阅的问题
- ◆▲首先祝大家新年快乐!!然后请兄弟们帮着解决一个问题!!谢谢◇△
- PowerDesigner中,一个表的关键字的字段名称,不能被其他表使用?
- 分组统计
- 求每分组取前3条纪录的sql语句
- sqlserver2000中我要将另一台服务器中的某一数据库中的某几张表增加到现在服务中的的一个数据库中,该怎样做,注意,我发现有导入导出或
- 问一个问题,这个下面的三张表是什么关系啊???
- 我用的是SQL Server 2005 Express,在建表的时候不能设置标识列,麻烦帮忙解决
set @sql=''
set @bh=''
set @i_len=0
set @i_len2=0然后@bh,@sl这两个在哪?没有声明
PRINT出来看看
set @sql= 'INSERT INTO #tab(bh,sl) VALUES ('+@bh+','+@sl+') '
set @sql= 'INSERT INTO #tab(bh,sl) VALUES ('''+@bh+''','''+@sl+''') '
在过程里建临时表?我觉得不如用表变量好一点
create procedure jysc
@fld_ddh varchar(3000)
as
if right(@fld_ddh,1) <> ','
set @fld_ddh=@fld_ddh+','
declare @bh varchar(30),@sl varchar(10)
set @bh=''
set @sl=''
create table #tab(bh varchar(30) null,sl varchar(10) null)
while CHARINDEX( ',',@fld_ddh)> 0
begin
set @bh=left(@fld_ddh,CHARINDEX( ',',@fld_ddh)-1)
set @fld_ddh=right(@fld_ddh,len(@fld_ddh)-CHARINDEX( ',',@fld_ddh))
set @sl=left(@fld_ddh,CHARINDEX( ',',@fld_ddh)-1)
set @fld_ddh=right(@fld_ddh,len(@fld_ddh)-CHARINDEX( ',',@fld_ddh))
insert into #tab select @bh,@sl
end
select * from #tab
exec dbo.jysc 'CQ0901,2,CQ0902,6,BJ0908,10'
/*(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)bh sl
------------------------------ ----------
CQ0901 2
CQ0902 6
BJ0908 10(所影响的行数为 3 行)*/drop procedure jysc
drop table #tab