额 原来ms sqlserver 中的视图果然是“虚表”哈

Posted MicrobeORM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了额 原来ms sqlserver 中的视图果然是“虚表”哈相关的知识,希望对你有一定的参考价值。

在视图中查询数据的时候,会不会使用实体表中的列上的索引呢?会 。。。。

测试结果

测试脚本

DECLARE @len INT =100;
WHILE @len>0
BEGIN
    
    INSERT INTO Teachers
            ( TeacherName, Sex, MoneyPay )
    VALUES  ( 
               CAST(@len AS NVARCHAR), -- TeacherName - nvarchar(50)
              NULL, -- Sex - bit
              10000  -- MoneyPay - decimal
              )
    
    SET @len-=1;
END

go


DECLARE @len INT =1000;
WHILE @len>0
BEGIN
    
    INSERT INTO Students
            ( StuName, Address, Birthday )
    VALUES  ( CAST(@len AS NVARCHAR )+\'-\'+CAST(@len AS NVARCHAR ), -- StuName - nvarchar(50)
              N\'\', -- Address - nvarchar(200)
              GETDATE()  -- Birthday - datetime
              )
          
    SET @len-=1;
END

go


DECLARE @len_t INT =1;
DECLARE @len_stu INT =1;
WHILE @len_t<=100
BEGIN
    SET @len_stu=@len_t;
    
    WHILE @len_stu>0
     BEGIN
        INSERT INTO TeachAndStudent
                ( TeacherId, StudentId, CreateTime )
        VALUES  ( @len_t, -- TeacherId - int
                  @len_stu, -- StudentId - int
                   GETDATE() -- CreateTime - datetime
                  )
         SET @len_stu-=1;
     END
    
    SET @len_t+=1;
END
------------test:--------------
--SELECT * FROM Teachers
--GO
--SELECT * FROM Students
--GO
--SELECT COUNT(*) FROM TeachAndStudent
GO
--CREATE VIEW VTeacherAndStudents
--AS 
--SELECT 
--a.id AS tid,
--c.Id AS stuid,
--a.TeacherName AS tname,
--c.StuName AS sname

-- FROM Teachers A
--INNER JOIN TeachAndStudent B ON B.TeacherId=A.Id
--LEFT JOIN Students C ON C.Id = B.StudentId

GO

SELECT * FROM VTeacherAndStudents a
WHERE a.tid>10 AND a.tid<20

 

以上是关于额 原来ms sqlserver 中的视图果然是“虚表”哈的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer之视图篇

插入到 SQL Server 中的视图中

MS Access 链接到 SQL 服务器视图

dashboard 数据绑定的时候 addTable 是视图

MS SqlServer 中的 Oracle“双”表的等价物是啥?

MDF文件丢失,如何恢复数据库(MS-SQL)