Создание представления с использованием хранимой процедуры

#sql #sql-server-2008 #sql-view

#sql #sql-server-2008 #sql-представление

Вопрос:

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

Ну, у меня есть две таблицы SQL (SQL SERVER 2008), Employee и Employee expenses, где идентификатор сотрудника является первичным ключом и внешним ключом соответственно.

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

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

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

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

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

a. Если у меня есть несколько записей для сотрудника в таблице Employee Expense, в представлении должно быть столько строк no

б. Даже если у меня нет записи в таблице расходов сотрудников, тогда я также должен получить строку для этого конкретного сотрудника в представлении с 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])
  

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

Комментарии:

1. в чем ваш вопрос? Покажите нам свою попытку….

2. Что вы пробовали? Если вы хотите выполнять код по запросу, вам следует нанять консультанта. Переполнение стека предназначено для решения конкретных проблем.

3. Извините, ребята, я не знаю, что для новичков нет никакой помощи в переполнении стека. Спасибо…

4. @Jithu — JNK объясняет вам, что вам нужно показать нам, что вы приложили некоторые усилия, пытаясь решить эту проблему самостоятельно. В противном случае, это просто выглядит так, как будто вы пришли сюда, чтобы кто-то сделал вашу работу за вас.

5. @Jithu — Новички приветствуются! Справочные вампиры — нет. Просто покажите, что вы пытались решить это самостоятельно. Когда вы публикуете «вопрос», который на самом деле является просто списком требований, ожидая, что кто-то решит его за вас, у вас меньше шансов получить хорошую помощь.

Ответ №1:

Если вы хотите создать представление из 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
  

Комментарии:

1. Конечно, в реальной жизни вы не должны создавать представление из сохраненной процедуры. Это признак того, что вы делаете что-то не так, если вы хотите это сделать. Представления создаются один раз, и их не нужно создавать повторно.

2. HLGM — это часть тестирования производительности в нашем продукте, в действительности мы его действительно не использовали. Спасибо за вашу помощь…

3. @HLGEM я не согласен. У нас есть процесс, который автоматически создает определенную базу данных, некоторые стандартные таблицы внутри нее и представление. Для этого полезно создать представление в SP.

Ответ №2:

Я использую следующий динамический код 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
    ')
  

Ответ №3:

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

И со страницы закрытия

Однако условия внешнего соединения могут по-разному взаимодействовать с условиями поиска в предложении WHERE, в зависимости от того, содержатся ли условия соединения в предложении FROM или WHERE . Поэтому возможность указывать внешние соединения 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
  

Комментарии:

1. Привет, Джейми, спасибо за ваше время. Здесь вопрос в том, как я могу поместить все это создание функции просмотра в хранимую процедуру!!

2. Теперь вы полностью меняете свой вопрос. Вы гуглили или искали по этому поводу? Когда я гуглю «Создать представление из SP SQL», второе попадание в список — это подробное описание этого.

3. Привет, Джейми, ваш вопрос действительно помогает мне в двух дополнительных вопросах, которые я упомянул. Однако реальный вопрос заключался в создании представления из хранимой процедуры. Спасибо за вашу помощь.