declare @orderno varchar(40)
--自定义聚合函数
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
drop function joinlct提示function附近有语法错误
谢谢
--自定义聚合函数
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
drop function joinlct提示function附近有语法错误
谢谢
解决方案 »
- sql问题
- sql2000的作业为何一直不自动运行?
- 求替换语句
- 大虾们 菜鸟请教个数据库问题
- sql发布和订阅
- 新手出道,极为幼稚的问题!!!!!!!!!但大家一定要帮忙啊!!!
- и璶开数誹库让远祘ㄏノ蔍数誹库该ń设﹚㎡????
- 这个触发器如何写
- 太不可思议了:内存表竟然比永久表慢12倍以上???SQL Server怎样优化的?
- 该语句问题出在那里呀?
- 【求助】三张表联合查询的问题
- 请问这个语句是什么意思,为什么我执行了以后表中什么反映都没有啊?
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
drop function joinlct這樣好象沒問題
还有就是, rp_locat 可以是数据库里的表吗
去掉不行,说@orderno没定义
--------------
我說的去掉第一行是“--自定义聚合函数”這一句的前面那句代碼。
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
goselect orderno,dbo.joinlct(orderno) from rp_locat group by orderno
drop function joinlct這是完整代碼,我建立了測試環境測試的,沒有問題。我的是SQL2000。
declare @sql varchar(1000)
set @sql=' select orderno,' + dbo.joinlct(orderno) + 'from rp_locat group by orderno
drop function joinlct '
exec(@sql)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))------------------------------
提一個問題,你用substring(@r,2,1000)字面上理解,@r的長度有可能超過1000,
你定義的時候@r varchar(1000)
會不會長度不夠?
改成declare @r varchar(8000)看看
--建立測試環境
Create Table TEST(orderno varchar(40),lct varchar(40))
--插入數據
Insert TEST Values(1,'a')
Insert TEST Values(1,'b')
Insert TEST Values(1,'c')
GO
--建立函數
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from TEST where orderno=@orderno
return(substring(@r,2,1000))
end
go
--測試
select orderno,dbo.joinlct(orderno) As lct from TEST group by orderno
--刪除測試環境
Drop Table TEST
drop function joinlct
--結果
/*
orderno lct
1 a,b,c
*/
returns varchar(1000)
as
begin
declare @r varchar(8000) --try看看,也許能行:)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from rp_locat where orderno=@orderno
return(substring(@r,2,1000))
end
go
提示"function附近有语法错误" 嗎?
提示"function附近有语法错误" 嗎?
是的啊
我的SQL2000,至少跑鱼老大的那段是沒有問題的orderno lct
----------- -------------
1 a,b,c
Create Table TEST(orderno varchar(40),lct varchar(40))
--插入數據
Insert TEST Values(1,'a')
Insert TEST Values(1,'b')
Insert TEST Values(1,'c')
GO
--建立函數
CREATE FUNCTION dbo.joinlct(@orderno varchar(40))
returns varchar(1000)
as
begin
declare @r varchar(1000)
set @r=''
select @r=@r+','+ltrim(rtrim(lct)) from TEST where orderno=@orderno
return(substring(@r,2,1000))
end
go
--測試
select orderno,dbo.joinlct(orderno) As lct from TEST group by orderno
--刪除測試環境
Drop Table TEST
drop function joinlct
--結果
/*
orderno lct
1 a,b,c
*/
我是SQL的新手
只我猜測:此函數是為了返回一些字段名,然後把此字段名放入Select語句中進行查詢
如果是這樣的話,是查詢不到你想要的結果的,得到的結果是一字符串如果不對不要打人喲
-------------
function建在那,就不用寫在sp中了,
存储过程中只要這一句就可以了
select orderno,dbo.joinlct(orderno) from rp_locat group by orderno
function不是建在存储过程中吗?
----------暈,當然不是的。