2014-09-03 74 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

回答