--if exists (select name from sysobjects where name ='p_lee_update_prodect' and type ='P')
-- DROP proc p_lee_update_prodect
--gocreate 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' 附近有语法错误。
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
提示错误:服务器: 消息 107,级别 16,状态 3,过程 p_lee_update_prodect,行 19
列前缀 'v_prodect_info' 与查询中所用的表名或别名不匹配。
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
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
列名 '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')指定列。
头大,你先不要在存储过程中创建view,就用基表(sbd_prodect_info),试下会不会有问题。
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
结贴去了,嘿嘿