存储过程报错,请教大虾指点!急急急!

SIRIUS_ORA 2008-10-22 08:10:37

--if exists (select name from sysobjects where name ='p_lee_update_prodect' and type ='P')
-- DROP proc p_lee_update_prodect
--go

create proc p_lee_update_prodect
as
begin
if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
DROP VIEW v_prodect_info

create VIEW v_prodect_info
as
select * from sbd_prodect_info

declare
@ll_row int
select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
if @ll_row > = 1
SELECT distinct information.code_id,
information.code_name,
'三边封',
information.spec_longth,
information.spec_width,
10000,
'A',
information.publish_longth,
information.publish_per,
case when information.made_order ='横' then 1
else 2 end,
case when information.made_layer ='单' then 1
when information.made_layer ='双' then 2
when information.made_layer ='三' then 3
when information.made_layer ='四' then 4
else 5 end,
case when information.made_type ='是' then 'yes'
else 'no' end,
information.color_count,
information.ink_type,
information.color_note
into sbd_prodect_info
FROM sbd_prodect_original join v_prodect_info as information
on sbd_prodect_original.code_id <> v_prodect_info.code_id
end

提示错误:服务器: 消息 156,级别 15,状态 1,过程 p_lee_update_prodect,行 11
在关键字 'VIEW' 附近有语法错误。
...全文
235 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SIRIUS_ORA 2008-10-23
  • 打赏
  • 举报
回复
问题已解决,谢谢楼上各位大虾了,尤其是Garnett_KG,谢谢!
结贴去了,嘿嘿
SIRIUS_ORA 2008-10-22
  • 打赏
  • 举报
回复
晕菜ing!
水族杰纶 2008-10-22
  • 打赏
  • 举报
回复
动态sql语句基本语法 
1 :普通SQL语句可以用Exec执行

eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格

当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错



declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确

3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
Garnett_KG 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 SIRIUS_ORA 的回复:]
服务器: 消息 207,级别 16,状态 3,过程 p_lee_update_prodect,行 16
列名 'code_name' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_order' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息…
[/Quote]

头大,你先不要在存储过程中创建view,就用基表(sbd_prodect_info),试下会不会有问题。
Garnett_KG 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 SIRIUS_ORA 的回复:]
还是不行,请继续指教,再次感谢各位大虾!
[/Quote]


报什么错啊?
SIRIUS_ORA 2008-10-22
  • 打赏
  • 举报
回复
服务器: 消息 207,级别 16,状态 3,过程 p_lee_update_prodect,行 16
列名 'code_name' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_order' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_layer' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'made_type' 无效。
服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
列名 'color_note' 无效。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 3 列(属于 'sbd_prodect_info')指定列。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 6 列(属于 'sbd_prodect_info')指定列。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 7 列(属于 'sbd_prodect_info')指定列。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 10 列(属于 'sbd_prodect_info')指定列。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 11 列(属于 'sbd_prodect_info')指定列。
服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
没有为第 12 列(属于 'sbd_prodect_info')指定列。
SIRIUS_ORA 2008-10-22
  • 打赏
  • 举报
回复
还是不行,请继续指教,再次感谢各位大虾!
fcuandy 2008-10-22
  • 打赏
  • 举报
回复
try:



create proc p_lee_update_prodect
as
begin
if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
exec('DROP VIEW v_prodect_info')

exec('create VIEW v_prodect_info
as
select * from sbd_prodect_info')

declare
@ll_row int
select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
if @ll_row > = 1
SELECT distinct information.code_id,
information.code_name,
'三边封',
information.spec_longth,
information.spec_width,
10000,
'A',
information.publish_longth,
information.publish_per,
case when information.made_order ='横' then 1 else 2 end,
case
when information.made_layer ='单' then 1
when information.made_layer ='双' then 2
when information.made_layer ='三' then 3
when information.made_layer ='四' then 4
else 5
end,
case when information.made_type ='是' then 'yes' else 'no' end,
information.color_count,
information.ink_type,
information.color_note
into sbd_prodect_info
FROM sbd_prodect_original
join v_prodect_info as information --这里用了别名
on sbd_prodect_original.code_id <> information.code_id --因为上面用了别名,所以被别名接管了,表名找不到
end
Garnett_KG 2008-10-22
  • 打赏
  • 举报
回复
create proc p_lee_update_prodect
as
begin
if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
DROP VIEW v_prodect_info
EXEC('
create VIEW v_prodect_info
as
select * from sbd_prodect_info
')
declare
@ll_row int
select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
if @ll_row > = 1
SELECT distinct information.code_id,
information.code_name,
'三边封',
information.spec_longth,
information.spec_width,
10000,
'A',
information.publish_longth,
information.publish_per,
case when information.made_order ='横' then 1
else 2 end,
case when information.made_layer ='单' then 1
when information.made_layer ='双' then 2
when information.made_layer ='三' then 3
when information.made_layer ='四' then 4
else 5 end,
case when information.made_type ='是' then 'yes'
else 'no' end,
information.color_count,
information.ink_type,
information.color_note
into sbd_prodect_info
FROM sbd_prodect_original join v_prodect_info as information
on sbd_prodect_original.code_id <> information.code_id
end

SIRIUS_ORA 2008-10-22
  • 打赏
  • 举报
回复
楼上二位在帮忙看看,还是有问题啊
提示错误:服务器: 消息 107,级别 16,状态 3,过程 p_lee_update_prodect,行 19
列前缀 'v_prodect_info' 与查询中所用的表名或别名不匹配。
中国风 2008-10-22
  • 打赏
  • 举报
回复
只可改为动态只能用动态

create view前面只有是注释和go
fcuandy 2008-10-22
  • 打赏
  • 举报
回复
create 对象 必须是批中的首条语句,所以你的写法不能成功。

你kg那样改为动态语句。
Garnett_KG 2008-10-22
  • 打赏
  • 举报
回复



create proc p_lee_update_prodect
as
begin
if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
DROP VIEW v_prodect_info
EXEC('
create VIEW v_prodect_info
as
select * from sbd_prodect_info
')
declare
@ll_row int
select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
if @ll_row > = 1
SELECT distinct information.code_id,
information.code_name,
'三边封',
information.spec_longth,
information.spec_width,
10000,
'A',
information.publish_longth,
information.publish_per,
case when information.made_order ='横' then 1
else 2 end,
case when information.made_layer ='单' then 1
when information.made_layer ='双' then 2
when information.made_layer ='三' then 3
when information.made_layer ='四' then 4
else 5 end,
case when information.made_type ='是' then 'yes'
else 'no' end,
information.color_count,
information.ink_type,
information.color_note
into sbd_prodect_info
FROM sbd_prodect_original join v_prodect_info as information
on sbd_prodect_original.code_id <> v_prodect_info.code_id
end




SIRIUS_ORA 2008-10-22
  • 打赏
  • 举报
回复
自己来顶下!
内容概要:本文围绕基于混沌系统与DNA编码的彩色图像加密解密体系展开研究,提出了一种多层级、高复杂度的复合加密方法。该方法深度融合混沌系统的伪随机遍历特性与DNA编码的高维并行处理能力,对彩色图像RGB三通道像素信息实施双重混淆与扩散操作,显著增强了加密算法的安全性与抗攻击能力。研究系统性地构建了完整的加密-解密流程,并重点针对实际传输环境中常见的高斯噪声、椒盐噪声及多种裁剪攻击(包括小面积、中面积、边缘与中心区域裁剪)进行了详尽的鲁棒性测试。实验结果表明,该算法不仅具备极高的密钥敏感性与安全性,而且在遭受不同程度噪声干扰或局部数据丢失后,仍能有效恢复出具有清晰结构与可用信息的解密图像,展现出卓越的容错性与实用性。; 适合人群:具备一定图像处理、信息安全或密码学基础知识的科研人员、研究生及从事多媒体安全传输开发的工程技术人员。; 使用场景及目标:①应用于军事通信、医疗影像保护、数字版权管理等对安全性要求极高的图像传输与存储场景;②为新型图像加密算法的设计提供创新思路,并为算法的抗干扰性能评估建立系统化测试体系,推动复合加密技术向工程化、实用化发展。; 阅读建议:建议读者结合Matlab代码实现,复现文中所述的加密流程与抗干扰测试,深入理解混沌序列生成、DNA编码规则映射、像素扩散机制等关键步骤,并可通过调整参数或引入新的攻击类型来进一步拓展算法的性能分析。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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