Создание представления с использованием хранимой процедуры - PullRequest
2 голосов
/ 10 октября 2011

Эти вопросы задавались несколько раз раньше, к сожалению, я не получил ответа на свои вопросы.

Что ж, у меня есть две таблицы SQL ( SQL SERVER 2008 ), затраты сотрудников и сотрудниковгде Идентификатор сотрудника - это первичный ключ и внешний ключ соответственно.

Столбцы таблицы сотрудников, 1. Идентификатор сотрудника (P-ключ) 2. Менеджер 3. Расположение 4. Дата присоединения 5. Имя

Столбцы таблицы расходов сотрудников, 1. Идентификатор расходов (клавиша P) 2. Идентификатор сотрудников (клавиша F) 3. Тип расходов 4. Сумма расходов 5. Дата расходов.

Вопрос в том, я хочу создать представлениедля использования в веб-части SharePoint, где я буду запрашивать обе таблицы, поэтому мое требование состоит в том, чтобы создать представление, используя следующие столбцы:

От сотрудника, мне нужно Идентификатор и имя сотрудника .Из расходов на сотрудников мне нужно Вид расходов, Сумма расходов, Дата расходов .

Дополнительные требования.

a.Если у меня есть несколько записей для сотрудника в таблице «Расходы на сотрудников», то в представлении должно быть много строк, которые не должны отображаться

b.Даже если у меня нет записи в таблице расходов сотрудника, я также должен получить строку для этого конкретного сотрудника в представлении со значением NULL для столбцов таблицы расходов сотрудника.

Пожалуйста, помогите мне продолжить...

Редактирование Чтобы добавить требуемый код вида в соответствии с указаниями членов Stack Overflow !!

CREATE VIEW ExpenseView AS (
    SELECT [Employee Expense].[Employee ID], Employee.[First Name], [Employee Expense].[Expense Type],[Employee Expense].[Expense Amount],[Employee Expense].[Expense Date]
            FROM Employee,[Employee Expense]
        WHERE [Employee Expense].[Employee ID] = Employee.[Employee ID])

Пожалуйста, помогите.

Ответы [ 3 ]

10 голосов
/ 10 октября 2011

Если вы хотите создать представление из SP, вам нужно использовать динамический SQL.

Примерно так.

create procedure ProcToCreateView 
as
exec ('create view MyView as select 1 as Col')

Код create view... необходимо отправить как строковый параметр в exec, и, судя по всему, у вас уже есть код, необходимый для представления, поэтому просто вставьте его между '.

Я действительно понятия не имею, зачем вам это нужно. Возможно, вам просто нужно знать, как использовать вид из SP

create procedure ProcToUseView
as
select Col
from MyView
4 голосов
/ 25 февраля 2012

Я использую следующий динамический код SQL в своей базе данных SQL, чтобы создать представление с процедурой хранения. Работает нормально:

    CREATE PROCEDURE uspCreateView
    AS
    EXEC ('

    CREATE VIEW vwDataLayoutFileAssignment
    AS

    SELECT b.FileID, d.FieldID
    FROM [File] b, DataLayoutFileAssignment c, [Field] d
    WHERE b.DriverFileID = c.FileID
    AND C.DataLayoutID = d.DataLayoutID
    ')
1 голос
/ 10 октября 2011

Использование соединений из MS BOL

А с закрыть страницу

Условия внешнего соединения, однако, могут по-разному взаимодействовать с ГДЕ условие поиска условия, в зависимости от того, является ли соединение условия в предложении ОТ или ГДЕ. Следовательно, способность указать внешние соединения Transact-SQL в предложении WHERE не рекомендуется, больше не документируется и будет удалено в будущем релиз.

Так что это превращает ваш код в:

CREATE VIEW ExpenseView AS
BEGIN
   SELECT [Employee Expense].[Employee ID], Employee.[First Name], [Employee Expense].[Expense Type],[Employee Expense].[Expense Amount],[Employee Expense].[Expense Date]
   FROM Employee
   LEFT OUTER JOIN [Employee Expense]
   ON [Employee Expense].[Employee ID] = Employee.[Employee ID]
END
...