首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急 自定义函数 把数据库名当作一个变量传进来解决方法

2012-04-18 
急!急!急!自定义函数把数据库名当作一个变量传进来set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER FUN

急!急!急! 自定义函数 把数据库名当作一个变量传进来
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

 
ALTER FUNCTION [dbo].[fun_HFL] ()
returns @TableTmp table(database_name varchar(36))
as
begin

declare @currentdatabasename nvarchar(20)

declare myCur cursor for select database_name from company_set-------取数据库名称

open myCur

fetch next from myCur
into @currentdatabasename

while @@fetch_status = 0
begin
---------------------------数 据 库 名 变 量--------------------
insert into @TableTmp(database_name) select database_name from #@currentdatabasename#.dbo.company_set

fetch next from myCur
into @currentdatabasename

end
close myCur
deallocate myCur

return

end


这样写函数可以建立
但是执行函数的时候会有错误。
刚才查了一下 数据库不能这样传。
谁有好的解决办法。
谢谢
解决了 加分,急。



[解决办法]
改用过程吧,函数你就别想了
[解决办法]

SQL code
 ALTER FUNCTION [dbo].[fun_HFL] ()returns @TableTmp table(database_name varchar(36))asbegindeclare @currentdatabasename nvarchar(20)declare myCur cursor for select database_name from company_set-------取数据库名称open myCurfetch next from myCurinto @currentdatabasenamewhile @@fetch_status = 0begin---------------------------数 据 库 名 变 量--------------------insert into @TableTmp select database_name from dbo.company_setfetch next from myCurinto @currentdatabasenameendclose myCurdeallocate myCurreturnend
[解决办法]
SQL code
没看明白你想要做什么给你一个 表值函数的例子。希望对你有帮助USE [mytest]GO/****** Object:  UserDefinedFunction [dbo].[fn_get_Split]    Script Date: 04/10/2012 14:12:41 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_get_Split]( @SplitString varchar(4000), -- 如果要传入NText类型,下面需要相应的修改,注释行为NText下同 @Separator varchar(2) = ','-- NVarChar(2) = N',')RETURNS @SplitStringsTable TABLE( [id] int identity(1,1), [value] varchar(8000) -- NVarChar(4000))ASBEGIN    DECLARE @CurrentIndex int    DECLARE @NextIndex int    DECLARE @ReturnText varchar(8000)-- NVarChar(4000)    SELECT @CurrentIndex=1    WHILE(@CurrentIndex<=datalength(@SplitString)) -- DATALENGTH(@SplitString)/2    BEGIN        SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex)        IF(@NextIndex=0 OR @NextIndex IS NULL)            SELECT @NextIndex=datalength(@SplitString)+1--DATALENGTH(@SplitString)/2                SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex)        INSERT INTO @SplitStringsTable([value])        VALUES(@ReturnText)                SELECT @CurrentIndex=@NextIndex+1    END    RETURNEND
[解决办法]
SQL code
SELECT DB_NAME() --获取当前数据库名
[解决办法]
函数中不能exec 动态拼接。

热点排行