Представления имеют некоторые ограничения. Использование 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
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
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 |
Надеюсь, вам понравится.