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

+1

Вы не можете создавать объекты sql-сервера внутри функции определения пользователя, посмотрите здесь, чтобы узнать больше о ['Создать пользовательские функции Ограничения'] (http://msdn.microsoft.com/en-gb/library/ms191320.aspx) –

+2

*** ПОЧЕМУ *** Вам нужна функция для создания представления?!?!? Просто ** создайте представление ** в SQL Server Management Studio и используйте его! Нет смысла постоянно снижать и воссоздавать его ... –

ответ

Смежные вопросы