存储过程中字符串截断问题

declare @sql nvarchar(3000)
set @sql='select *,(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,isnull(A.eCostPrice,0) as eCostPrice,isnull(A.hCostPrice,0) as hCostPrice,isnull(B.mCostPrice,0) as mCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,A.eCostPrice,B.hCostPrice from #t_equ_cost A full outer join #t_hum_cost B on A.Batch=B.Batch) A full outer join #t_met_cost B on A.Batch=B.Batch) A'

出错错误指示

Error Message: 名称 'select *,(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,isnull(A.eCostPrice,0) as eCostPrice,isnull(A.hCostPrice,0) as hCostPrice,isnull(B.mCostPrice,0) as mCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,A.eCostPrice,B.hCostPrice from #t_equ_cost ' 不是有效的标识符


语句在红色位置被截断了,@sql长度设置为8000都无用。请问大家要怎么解决呢?
...全文
306 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chinajiabing 的回复:]
能运行过去..你是什么数据库..2000
[/Quote]

我是用2005啊
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 feixianxxx 的回复:]
引用 11 楼 wggfcusmq 的回复:
对不起大家,我把execute (@sql) 写成 execute @sql 了。。。 郁闷!

...
问题解决了?
[/Quote]

解决了。。谢谢~
ChinaJiaBing 2009-08-04
  • 打赏
  • 举报
回复
能运行过去..你是什么数据库..2000
--小F-- 2009-08-04
  • 打赏
  • 举报
回复
用EXEC不行么?
--小F-- 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wggfcusmq 的回复:]
对不起大家,我把execute (@sql) 写成 execute @sql 了。。。 郁闷!
[/Quote]
OMG
feixianxxx 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wggfcusmq 的回复:]
对不起大家,我把execute (@sql) 写成 execute @sql 了。。。 郁闷!
[/Quote]
...
问题解决了?
  • 打赏
  • 举报
回复
对不起大家,我把execute (@sql) 写成 execute @sql 了。。。 郁闷!
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sdhdy 的回复:]
引用 8 楼 tomzzu 的回复:
问题不在于长度
红色位置被截断了, 并不是实际字符串被截断, 而是错误提示信息有个字串的最大限制, 它只是截断限制内的字串提示给你而已

根据错误信息显示 (Error Message: 名称), 数据库把它当然字段名称了

先别用拼串, 用实际语句运行一下试试

.......
[/Quote]

实际招行OK的,只是我现在要加给存储过程加一个iswhere参数作为搜索条件,就要用拼串了。
sdhdy 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tomzzu 的回复:]
问题不在于长度
红色位置被截断了, 并不是实际字符串被截断, 而是错误提示信息有个字串的最大限制, 它只是截断限制内的字串提示给你而已

根据错误信息显示 (Error Message: 名称), 数据库把它当然字段名称了

先别用拼串, 用实际语句运行一下试试
[/Quote]
.......
Tomzzu 2009-08-04
  • 打赏
  • 举报
回复
问题不在于长度
红色位置被截断了, 并不是实际字符串被截断, 而是错误提示信息有个字串的最大限制, 它只是截断限制内的字串提示给你而已

根据错误信息显示 (Error Message: 名称), 数据库把它当然字段名称了

先别用拼串, 用实际语句运行一下试试
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
SQL codedeclare@sqlnvarchar(3000)set@sql='select *,(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date¡­
[/Quote]

我的直接打印也是好的,但到程序中招行就不行了。 郁闷啊。。

我的最开始的存储过程。。大家帮我看看问题在那好不?


ALTER proc [dbo].[e_pro_cost]
@type tinyint
as
--将机台信息存入临时表
begin
if exists(select * from tempdb.dbo.sysobjects where id=object_id(N'tempdb.dbo.#t_equ_cost'))
drop table #t_equ_cost
create table #t_equ_cost
(
Batch varchar(50),
eCostPrice float,
MOID varchar(50),
Date Datetime,
PMCPlanner varchar(50),
PMCPlannerName varchar(50)
)
insert into #t_equ_cost exec e_equ_cost @type
end

--将人工信息存入临时表
begin
if exists(select * from tempdb.dbo.sysobjects where id=object_id(N'tempdb.dbo.#t_hum_cost'))
drop table #t_hum_cost
create table #t_hum_cost
(
Batch varchar(50),
hCostPrice float,
MOID varchar(50),
Date Datetime,
PMCPlanner varchar(50),
PMCPlannerName varchar(50)
)
insert into #t_hum_cost exec e_hum_cost @type
end

--将物料信息存入临时表
begin
if exists(select * from tempdb.dbo.sysobjects where id=object_id(N'tempdb.dbo.#t_met_cost'))
drop table #t_met_cost
create table #t_met_cost
(
Batch varchar(50),
mCostPrice float,
MOID varchar(50),
Date Datetime,
PMCPlanner varchar(50),
PMCPlannerName varchar(50)
)
insert into #t_met_cost exec e_met_cost @type
end

--机台,人工,物料总和
declare @sql varchar(8000)
set @sql='select *,(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice from (
select
isnull(A.Batch,B.Batch) as Batch,
isnull(A.MOID,B.MOID) as MOID,
isnull(A.Date,B.Date) as Date,
isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,
isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,
isnull(A.eCostPrice,0) as eCostPrice,
isnull(A.hCostPrice,0) as hCostPrice,
isnull(B.mCostPrice,0) as mCostPrice from
(
select
isnull(A.Batch,B.Batch) as Batch,
isnull(A.MOID,B.MOID) as MOID,
isnull(A.Date,B.Date) as Date,
isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,
isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,
A.eCostPrice,B.hCostPrice from #t_equ_cost A full outer join #t_hum_cost B on A.Batch=B.Batch
)
A full outer join #t_met_cost B on A.Batch=B.Batch
) A'

execute @sql

drop table #t_met_cost
drop table #t_hum_cost
drop table #t_equ_cost
GO

soft_wsx 2009-08-04
  • 打赏
  • 举报
回复
如果再不行的话,多加两个变量,最后将变量相加起来
SQL77 2009-08-04
  • 打赏
  • 举报
回复
看得晕了!!!!
将语句分好,长度应该没问题,没超过3000
--小F-- 2009-08-04
  • 打赏
  • 举报
回复
偶机器上是好的
--小F-- 2009-08-04
  • 打赏
  • 举报
回复
declare @sql nvarchar(3000) 
set @sql='select *,(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,isnull(A.eCostPrice,0) as eCostPrice,isnull(A.hCostPrice,0) as hCostPrice,isnull(B.mCostPrice,0) as mCostPrice from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,A.eCostPrice,B.hCostPrice from #t_equ_cost A full outer join #t_hum_cost B on A.Batch=B.Batch) A full outer join #t_met_cost B on A.Batch=B.Batch) A'

print(@sql)
/*select *,
(eCostPrice+hCostPrice+mCostPrice) as TotalCostPrice
from (select isnull(A.Batch,B.Batch) as Batch,isnull(A.MOID,B.MOID) as MOID,
isnull(A.Date,B.Date) as Date,isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,
isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,
isnull(A.eCostPrice,0) as eCostPrice,isnull(A.hCostPrice,0) as hCostPrice,
isnull(B.mCostPrice,0) as mCostPrice from (select isnull(A.Batch,B.Batch) as Batch,
isnull(A.MOID,B.MOID) as MOID,
isnull(A.Date,B.Date) as Date,
isnull(A.PMCPlanner,B.PMCPlanner) as PMCPlanner,
isnull(A.PMCPlannerName,B.PMCPlannerName) as PMCPlannerName,
A.eCostPrice,B.hCostPrice from #t_equ_cost A
full outer join #t_hum_cost B on A.Batch=B.Batch) A
full outer join #t_met_cost B on A.Batch=B.Batch) A*/
soft_wsx 2009-08-04
  • 打赏
  • 举报
回复
改成4000试试
soft_wsx 2009-08-04
  • 打赏
  • 举报
回复
nvarchar(4000)最大支持4000

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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