Статьи

Оператор SELECT * в представлении не работает

Вступление

Представления имеют некоторые ограничения. Использование SELECT * в представлении не является хорошей идеей. Если мы создаем представление, мы должны использовать имя Columns в операторе Select. Мы также рекомендовали использовать для создания материализованного представления (с опциями SCHEMABINDING).

Здесь, в этой статье, мы собираемся обсудить неблагоприятную реакцию использования SELECT * в представлении.

Давайте посмотрим на простой пример, чтобы проиллюстрировать нашу точку зрения

Шаг — 1 [Создать базовую таблицу]

 IF OBJECT_ID(N'dbo.tbl_EMPLOYEE', N'U') IS NOT NULL
  BEGIN
  DROP TABLE [dbo].[tbl_EMPLOYEE];
  END
GO
CREATE TABLE [dbo].[tbl_EMPLOYEE]
  (
  EMPID  INT,
  EMPNAME  VARCHAR(50)
  );
GO
Шаг — 2 [Вставить несколько записей в базовую таблицу]
 INSERT INTO  [dbo].[tbl_EMPLOYEE]
  (EMPID, EMPNAME)
VALUES(1, 'Joydeep Das'),
  (2, 'Sukamal Jana');
GO

Шаг — 3 [Создать ВИД из этой базовой таблицы]

 IF OBJECT_ID(N'dbo.view_EMPLOYEE', N'V') IS NOT NULL
  BEGIN
  DROP VIEW [dbo].[view_EMPLOYEE];
  END
GO 
CREATE VIEW [dbo].[view_EMPLOYEE]
AS
SELECT * FROM [dbo].[tbl_EMPLOYEE]; 
GO

Шаг — 4 [Запустить и таблицу и просмотр]

SELECT * FROM [dbo].[tbl_EMPLOYEE];
SELECT * FROM [dbo].[view_EMPLOYEE];
EmpId EmpName
1
2 Сукамал Яна

EmpId EmpName
1
2 Сукамал Яна

Шаг — 5 [Добавить еще столбцы в базовую таблицу]

ALTER TABLE [dbo].[tbl_EMPLOYEE]
ADD [GRADE] CHAR(1); 
GO
Шаг — 6 [Обновить новый столбец с данными]
UPDATE [dbo].[tbl_EMPLOYEE]
SET [GRADE] = 'A';
GO

Шаг — 7 [Снова запустите Table и View — найдем ли мы разницу]

SELECT * FROM [dbo].[tbl_EMPLOYEE];
SELECT * FROM [dbo].[view_EMPLOYEE];
EmpId EmpName GRADE
1 A
2 Сукамал Яна A

EmpId EmpName
1
2 Сукамал Яна

Шаг — 8 [Запустить хранимую процедуру sp_refreshview]

 EXEC SP_REFRESHVIEWview_EMPLOYEE;

Шаг — 9 [Снова сравните — запустите и таблицу и просмотр]

SELECT * FROM [dbo].[tbl_EMPLOYEE];
SELECT * FROM [dbo].[view_EMPLOYEE];
EmpId EmpName GRADE
1 A
2 Сукамал Яна A

EmpId EmpName GRADE
1 A
2 Сукамал Яна A

Надеюсь, вам понравится.