新建了一个函数,将交叉表中的数据读出!老是错误!请高手看看!

Chimae 2003-12-05 06:25:13
具体查看http://expert.csdn.net/Expert/topic/2530/2530994.xml?temp=.8444025
我想把Exec(@sql)换成函数实现!高手指点!
CREATE FUNCTION fcMCGroundFactorIndex ()
RETURNS @tmpTable TABLE
AS
BEGIN
declare @sql varchar(8000)
set @sql = 'select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex AS ''主单'''
select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar) +'''
then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar)+']'
from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
INSERT INTO @tmpTable @sql
END
RETURN
...全文
22 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-12-05
  • 打赏
  • 举报
回复
create proc fcMCGroundFactorIndex
AS
BEGIN
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
exec('select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单] '+@sql+' into ##全局临时表 from 你的表')
END
go

......
Chimae 2003-12-05
  • 打赏
  • 举报
回复
谢谢大家!结分!
aierong 2003-12-05
  • 打赏
  • 举报
回复
函数不可以动态运行SQL语句

你改为过程把

EXEC(@SQL)
或者
declare @sql nvarchar(4000)
execute sp_executesql @sql
txlicenhe 2003-12-05
  • 打赏
  • 举报
回复
函数中不能用动态SQL语句,
非确定性函数

@@ERROR
FORMATMESSAGE
NEWID
IDENTITY
GETANSINULL
PATINDEX
@@ROWCOUNT
GETDATE
PERMISSIONS
@@TRANCOUNT
GetUTCDate
SESSION_USER
APP_NAME
HOST_ID
STATS_DATE
CHARINDEX
HOST_NAME
SYSTEM_USER
CURRENT_TIMESTAMP
IDENT_INCR
TEXTPTR
CURRENT_USER
IDENT_SEED
TEXTVALID
DATENAME
IDENTITY
USER_NAME
以上这些函数都不能在自定义函数中使用
Chimae 2003-12-05
  • 打赏
  • 举报
回复
pengdali(大力 V3.0),谢谢你的提点,我用函数能实现返回上面的记录集吗?
Chimae 2003-12-05
  • 打赏
  • 举报
回复
呵呵,没刷新,我试试!谢谢!
Chimae 2003-12-05
  • 打赏
  • 举报
回复
pengdali(大力 V3.0),我现在用函数返回表的形式来返回上面的记录集该如何实现!因为我的iFactorClassSn还有对应的关联表,我要将对应的关联表数据也要读到该记录集中来!
pengdali 2003-12-05
  • 打赏
  • 举报
回复
1、
不要懒varchar后加长度

2、
@sql是有长度限制的,不要加多余的空格、回车



create proc fcMCGroundFactorIndex
AS
BEGIN
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
exec('select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单] '+@sql+' from 你的表')
END
pengdali 2003-12-05
  • 打赏
  • 举报
回复
create proc fcMCGroundFactorIndex
AS
BEGIN
declare @sql varchar(8000)
set @sql = 'select viewMCExampleFactor.iFactorClassSn,viewMCGroundFactorDescribe.iIndex [主单]'
select @sql = @sql + ',sum(case sExampleNo when '''+ cast(sExampleNo as varchar(10))+''' then isnull(viewMCExampleFactor.iIndex,0) else 0 end) ['+ '案例'+cast(sAliasName as varchar(10))+']'
from (select distinct sExampleNo,sAliasName from viewMCExampleFactor) as a
exec(@sql)
END
pengdali 2003-12-05
  • 打赏
  • 举报
回复
函数不可以用exec这是sqlserver的约束

34,590

社区成员

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

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