2014-09-03 72 views
-2

我想在我的函数内部创建视图,并且每当我想创建我的视图时,我只需引用函数并调用它。SQL Server:在用户定义函数中声明视图

我写了这个代码,但我得到了一个错误:

create FUNCTION [dbo].[testFunc]() 
RETURNS bigint 
AS 
BEGIN 
    IF OBJECT_ID ('dbo.r_Sales01_Requests__Duplicates', 'V') IS NOT NULL 
     DROP VIEW dbo.r_Sales01_Requests__Duplicates ; 
    go 

    create view r_Sales01_Requests__Duplicates ( 
    CompanyID 
    ,Branch 
    ,Year 
    ,VoucherType,VoucherNumber 
    ,Date_Persian 
    ,Row) as 
    select 
     CompanyID 
     ,Branch 
     ,Year 
     ,VoucherType 
     ,VoucherNumber 
     ,Date_Persian 
     ,Row 
    from t_SalesRequests 
    group by CompanyID, Branch, Year, VoucherType, VoucherNumber, Date_Persian, Row 
    having count(*)>1 

    return 
END 

注:对我来说,有它在创建函数以下部分是非常重要的。

IF OBJECT_ID ('dbo.r_Sales01_Requests__Duplicates', 'V') IS NOT NULL 
    DROP VIEW dbo.r_Sales01_Requests__Duplicates ; 
+1

您将无法在函数内部创建一个视图(http://msdn.microsoft.com/en-gb/library/ms191320的.aspx)。要在存储过程中执行此操作,您需要使用动态SQL。 http://stackoverflow.com/questions/7712702/creating-a-view-using-stored-procedure – Laurence 2014-09-03 19:02:54

+1

你不能在一个用户定义函数内部创建sql服务器对象看看这里阅读更多关于['创建用户定义函数限制'](http://msdn.microsoft.com/en-gb/library/ms191320.aspx) – 2014-09-03 19:05:29

+2

***为什么***你需要一个函数来创建视图?!?!?只需**在SQL Server Management Studio中创建视图并使用它!没有任何一点在不断下降和重新创造它... – 2014-09-03 19:51:14

回答