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

存储过程中怎么创建别库的自定义函数

2012-03-26 
存储过程中如何创建别库的自定义函数我的做法当然是不行的SQL codeUSE LzmTWWorksGOCREATE PROCEDURE [dbo

存储过程中如何创建别库的自定义函数
我的做法当然是不行的

SQL code
USE LzmTWWorksGOCREATE PROCEDURE [dbo].[CreateLDateFunction]     @Database nvarchar(50)    ,@Namespace nvarchar(50)=N'dbo'    ,@FunctionName nvarchar(50)    ,@LDateTableNamespace nvarchar(50)=N'dbo'    ,@LDateTable nvarchar(50)ASBEGIN    DECLARE @SQL nvarchar(MAX)    SELECT @SQL = [LzmTWWorks].[dbo].[GetCreateLdateFunctionStatement] (       @Namespace      ,@FunctionName       ,@LDateTableNamespace      ,@LDateTable)    SET @SQL = N'USE ' + @Database + ' ' + @SQL    PRINT @SQL    EXEC sp_executesql @SQLEND


调用:

SQL code
DECLARE    @return_value intEXEC    @return_value = [LzmTWWorks].[dbo].[CreateLDateFunction]        @Database = N'EmployeeWorks',        @FunctionName = N'FunTest',        @LDateTable = N'测试'SELECT    'Return Value' = @return_value


显示结果:

SQL code
USE EmployeeWorks CREATE FUNCTION [dbo].[FunTest] (         @当前时间    [dbo].[LDate] = N'Current')RETURNS TABLE ASRETURN (    SELECT a.*    FROM [dbo].[测试] a    RIGHT OUTER JOIN    (        SELECT    [测试ID]                ,MIN(DISTINCT [截止日期])AS 查询时间        FROM [dbo].[测试]        WHERE   @当前时间 BETWEEN [起始日期] AND [截止日期]        GROUP BY [测试ID]    ) b    ON a.[测试ID]= b.[测试ID] AND a.截止日期 = b.查询时间)消息 111,级别 15,状态 1,第 2 行'CREATE FUNCTION' 必须是查询批次中的第一个语句。消息 137,级别 15,状态 2,第 17 行必须声明标量变量 "@当前时间"。(1 行受影响)


不知能否做得到?

[解决办法]
SQL code
USE EmployeeGOCREATE FUNCTION ...GO
[解决办法]
USE EmployeeWorks 


go


CREATE FUNCTION [dbo].[FunTest]

....
[解决办法]
CREATE FUNCTION [dbo].[FunTest] 
(
@当前时间 datetime
)
RETURNS TABLE 
AS
RETURN
[解决办法]
SQL code
USE LzmTWWorksGOCREATE PROCEDURE [dbo].[CreateLDateFunction]     @Database nvarchar(50)    ,@Namespace nvarchar(50)=N'dbo'    ,@FunctionName nvarchar(50)    ,@LDateTableNamespace nvarchar(50)=N'dbo'    ,@LDateTable nvarchar(50)ASBEGIN    DECLARE @SQL nvarchar(MAX)    SELECT @SQL = [LzmTWWorks].[dbo].[GetCreateLdateFunctionStatement] (       @Namespace      ,@FunctionName       ,@LDateTableNamespace      ,@LDateTable)    SET @SQL = N'USE ' + @Database + '     go    ' + @SQL    PRINT @SQL    EXEC sp_executesql @SQLEND
[解决办法]
你能否简化一下问题,这个表结构都没有
[解决办法]
我总算看明白你的意思了,没办法,人笨了点
----

exec()里面不能有go
'CREATE FUNCTION' 必须是查询批次中的第一个语句。
exec()结束之后sqlcontext仍然返回调用它的状态

---
所以,总的来说是没有办法
[解决办法]
只要上面三条有一条能够解决掉,这个问题就了结了,估计很玄
[解决办法]
此题无解.

[解决办法]
搞不定
[解决办法]
变通的方法.
每个库下建相应的存储过程执行当前库下CREATE FUNCTION 的操作.



你的这个存储过程中跟具@dbname参数来判断调用执行哪个库下的proc..
[解决办法]
牛人都搞不定了
[解决办法]
表当然可以了,create table没有规定必须在处理批次的首条
[解决办法]
根本不可能的,就象永动机一样,这个语法首先是禁止的

热点排行