我写了一个SQL自定义函数,执行不成功,急!! 具体如下: GO CREATE FUNCTIO
我写了一个SQL自定义函数,执行不成功,急!!具体如下:GOCREATEFUNCTIONdbo.SplitString(@fieldvarchar(50),---需拼接的...
我写了一个SQL自定义函数,执行不成功,急!!
具体如下:
GO
CREATE FUNCTION dbo.SplitString
(
@field varchar (50) ,---需拼接的字段
@table varchar(50) ,---表名
@id varchar(50) ---AutoID的值
)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @input varchar(8000)
SELECT @input = (@input+',','') + @field FROM @table WHERE AutoID = @id
RETURN @input
END
GO
在查询分析器中执行以上语句时,提示"必须声明变量'@table'。",快跪了,求高人帮忙。 展开
具体如下:
GO
CREATE FUNCTION dbo.SplitString
(
@field varchar (50) ,---需拼接的字段
@table varchar(50) ,---表名
@id varchar(50) ---AutoID的值
)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @input varchar(8000)
SELECT @input = (@input+',','') + @field FROM @table WHERE AutoID = @id
RETURN @input
END
GO
在查询分析器中执行以上语句时,提示"必须声明变量'@table'。",快跪了,求高人帮忙。 展开
3个回答
展开全部
有变量的不能直接执行的,要用拼接语句再exec执行
--忘记函数里面是不可以执行这种动态语句的,所以你再想其他办法吧。
--下面的是错误的
我改了一下你试下吧
DROP FUNCTION dbo.SplitString
GO
CREATE FUNCTION dbo.SplitString
(
@field varchar (50) ,---需拼接的字段
@table varchar(50) ,---表名
@id varchar(50) ---AutoID的值
)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @input varchar(8000)
DECLARE @SQL VARCHAR(2000)
SET @SQL='SELECT @input'+'='+ @input+CHAR(43)+CHAR(39)+','+CHAR(39) +CHAR(43)+' '+@field+' FROM '+@table+' WHERE AutoID = '+@id
exec sp_executesql @SQL,N'@sinput varchar(2000) output',@sinput=@input output RETURN @input
END
GO
展开全部
SQL Server查询语句中的table不能使用变量的形式, 必须明确指定. 你可以考虑动态生成查询SQL语句, 目前的方法行不通.
而执行动态SQL需要使用到sp_executesql存储过程, 但是该存储过程在函数中是不被支持的(函数执行会有“只有函数和扩展存储过程才能从函数内部执行”的错误提示). 所以, 你可能要考虑使用存储过程来实现了.
示例存储过程:
create procedure dbo.splitString @field nvarchar (50), @table nvarchar(50), @id nvarchar(50), @txtVal nvarchar(max) output
as
declare @qs nvarchar(max)
set @txtVal = ''
set @qs = 'select @v = @v + '';'' + ' + @field + ' from ' + @table + ' where AutoID= ' + @id
exec sp_executesql @qs, N'@v nvarchar(max) output', @txtVal output
go
调用此存储过程:
declare @txtVal nvarchar(max)
exec dbo.splitString 'coder', 'dbo.apbt_accreditsite', 'abc', @txtVal output
select @txtVal -- 通过变量@txtVal获得结果
而执行动态SQL需要使用到sp_executesql存储过程, 但是该存储过程在函数中是不被支持的(函数执行会有“只有函数和扩展存储过程才能从函数内部执行”的错误提示). 所以, 你可能要考虑使用存储过程来实现了.
示例存储过程:
create procedure dbo.splitString @field nvarchar (50), @table nvarchar(50), @id nvarchar(50), @txtVal nvarchar(max) output
as
declare @qs nvarchar(max)
set @txtVal = ''
set @qs = 'select @v = @v + '';'' + ' + @field + ' from ' + @table + ' where AutoID= ' + @id
exec sp_executesql @qs, N'@v nvarchar(max) output', @txtVal output
go
调用此存储过程:
declare @txtVal nvarchar(max)
exec dbo.splitString 'coder', 'dbo.apbt_accreditsite', 'abc', @txtVal output
select @txtVal -- 通过变量@txtVal获得结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你。。 这个sql 是想要干什么?
SELECT @input = (@input+',','') + @field FROM @table WHERE AutoID = @id 这句话是什么意思?
SELECT @input = (@input+',','') + @field FROM @table WHERE AutoID = @id 这句话是什么意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询