Sql server 我的视图在SQL Server中的何处?
我有一张这样的桌子:Sql server 我的视图在SQL Server中的何处?,sql-server,sql-server-2008-express,Sql Server,Sql Server 2008 Express,我有一张这样的桌子: sensorId int, Value int, obDate datetime 在SQLServer2008Express中 我想获得每个传感器的最新值,因此我创建了如下视图: CREATE VIEW [dbo].[LAT_POLDATA] AS ( SELECT A.sensorId, A.obDate, A.Value FROM [Met].[dbo].[POLDATA] AS A INNER JOIN (SELECT
sensorId int, Value int, obDate datetime
在SQLServer2008Express中
我想获得每个传感器的最新值,因此我创建了如下视图:
CREATE VIEW [dbo].[LAT_POLDATA]
AS (
SELECT A.sensorId, A.obDate, A.Value
FROM [Met].[dbo].[POLDATA] AS A
INNER JOIN
(SELECT sensorId, MAX(obDate) AS obDate
FROM [Met].[dbo].[POLDATA]
GROUP BY sensorId) AS B ON A.sensorId = B.sensorId
AND A.obDate = B.obDate
)
现在,如果我从[dbo].[LAT_POLDATA]查询Select*,当我在Microsoft SQL Server Management Studio中执行此操作时,会得到值,但在我的数据库中的视图下看不到此视图
如果我从ASP.net服务查询它,查询将失败并引发错误:
System.Data.SqlClient.SqlException:对象名称“LAT_POLDATA”无效
风景在哪里?为什么我看不到它SSMS?执行此查询并查看是否可以在此处找到它,此查询将返回在数据库中创建的所有视图
SELECT SCHEMA_NAME(schema_id) AS schema_name
,name AS view_name
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexed') AS IsIndexed
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexable') AS IsIndexable
FROM sys.views
WHERE name LIKE 'LAT_POLDATA%'
GO
执行此查询并查看是否可以在此处找到它,此查询将返回在数据库中创建的所有视图
SELECT SCHEMA_NAME(schema_id) AS schema_name
,name AS view_name
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexed') AS IsIndexed
,OBJECTPROPERTYEX(OBJECT_ID,'IsIndexable') AS IsIndexable
FROM sys.views
WHERE name LIKE 'LAT_POLDATA%'
GO
在ManagementStudio中,请尝试添加首选数据库名称并执行它
use [yourDatabaseName]
Select * from [dbo].[LAT_POLDATA]
如果出现错误,则该视图不在数据库中
然后按照这个
USE [yourDatabasename]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create View [dbo].[LAT_POLDATA] AS (
SELECT A.sensorId , A.obDate , A.Value
FROM [Met].[dbo].[POLDATA] AS A
INNER JOIN (
SELECT sensorId , MAX(obDate) AS obDate
FROM [Met].[dbo].[POLDATA]
GROUP BY sensorId
) AS B
ON A.sensorId = B.sensorId
AND A.obDate = B.obDate
)
GO
在ManagementStudio中,请尝试添加首选数据库名称并执行它
use [yourDatabaseName]
Select * from [dbo].[LAT_POLDATA]
如果出现错误,则该视图不在数据库中
然后按照这个
USE [yourDatabasename]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create View [dbo].[LAT_POLDATA] AS (
SELECT A.sensorId , A.obDate , A.Value
FROM [Met].[dbo].[POLDATA] AS A
INNER JOIN (
SELECT sensorId , MAX(obDate) AS obDate
FROM [Met].[dbo].[POLDATA]
GROUP BY sensorId
) AS B
ON A.sensorId = B.sensorId
AND A.obDate = B.obDate
)
GO
抱歉,如果问题很琐碎,但是,您是否刷新了视图?ManagementStudio在你刷新之前不会显示新创建的对象…这是我做的第一件事。你没有在Master或任何其他数据库上创建它吗?或者可能在事务中?不是为了推广产品,但您可以从redgate下载此免费工具,它允许您搜索sql实例中的所有对象:您可以在服务器上的所有数据库中搜索视图名称,然后您可能已经在主数据库下创建了视图抱歉,如果问题很简单,但是,你更新了你的观点吗?ManagementStudio在你刷新之前不会显示新创建的对象…这是我做的第一件事。你没有在Master或任何其他数据库上创建它吗?或者可能在事务中?不是为了推广产品,但您可以从redgate下载此免费工具,它允许您搜索sql实例中的所有对象:您可以在服务器上的所有数据库中搜索视图名称,然后您可能已经在主数据库下创建了视图是的,您是对的。它不在我的数据库里。那么,如何创建视图,以便在我的数据库中而不是在主数据库中创建它呢?当我在create view语句之前使用use[yourDatabaseName]时,会收到错误消息:“create view”必须是查询批处理中的第一条语句尝试在use[…]行和create view行之间添加GO是的,您是对的。它不在我的数据库里。那么,如何创建视图,以便在我的数据库中而不是在主数据库中创建它呢?当我在create view语句之前使用use[yourDatabaseName]时,会收到错误消息:“create view”必须是查询批处理中的第一条语句尝试在use[…]行和create view行之间添加GO