关于表值函数的参数传递问题——为什么不能传递列名作为参数

humorous2001 2009-09-08 12:01:28
我写了一个表值函数:

ALTER function [dbo].[split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin

while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end

然后使用下面的语句,这样报错,ParentStr是NewsBoard的字段,请问如何解决?:
"ParentStr" 不是可识别的表提示选项。如果它要作为表值函数的参数,请确保您的数据库兼容模式设置为 90。

ALTER PROCEDURE [dbo].[ShowCurrentBoardNavigation]
@BoardID int AS
begin
select BoardID,BoardName,ParentStr,ParentID from News_Board b
where BoardID =@Boardid and Convert(varchar(10),@BoardID) in (select * from split(ParentStr,','))
end
...全文
264 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
magic_sgx99 2012-10-18
  • 打赏
  • 举报
回复
-- 一、更改数据库的兼容级别
DECLARE @DBName VARCHAR(100)
SELECT @DBName = 'dagl'
EXEC sp_dbcmptlevel @DBName,90

-- 二、查询数据
select r.* from table --该表中必须含有ParentStr字段
cross apply dbo.split(ParentStr) as r
xiaoliaoyun 2009-09-08
  • 打赏
  • 举报
回复

--更改数据库的兼容级别
DECLARE @DBName VARCHAR(100)
SELECT @DBName = db_name()
EXEC sp_dbcmptlevel @DBName,90
GO
--然后执行存储过程

EXEC [dbo].[ShowCurrentBoardNavigation] @BoardID = 1

xiaoliaoyun 2009-09-08
  • 打赏
  • 举报
回复

--更改数据库的兼容级别
DECLARE @DBName VARCHAR(100)
SELECT @DBName = db_name()
EXEC sp_dbcmptlevel @DBName,90

--然后执行存储过程

EXEC [dbo].[ShowCurrentBoardNavigation] @BoardID = 1

Yang_ 2009-09-08
  • 打赏
  • 举报
回复
表值函数有这个限制,try:


ALTER PROCEDURE [dbo].[ShowCurrentBoardNavigation]
@BoardID int AS
begin
select BoardID,BoardName,ParentStr,ParentID from News_Board b
cross apply (select * from dbo.split(b.ParentStr,',')) as t
where b.BoardID =@Boardid and Convert(varchar(10),@BoardID) = t.col
end
chuifengde 2009-09-08
  • 打赏
  • 举报
回复
1.用ParentStr作参数不行
2.去掉函数,改如下:
ALTER PROCEDURE [dbo].[ShowCurrentBoardNavigation]
@BoardID int AS
begin
select BoardID,BoardName,ParentStr,ParentID from News_Board b
where BoardID =@Boardid and charindex(','+ltrim(@BoardId)+',',','+ParentStr+',')>0
end
chuifengde 2009-09-08
  • 打赏
  • 举报
回复
select * from dbo.split(...)
jwdream2008 2009-09-08
  • 打赏
  • 举报
回复
顶!

34,590

社区成员

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

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