--1 use TMS_DEV go if exists (select * from sysobjects where id = object_id(N'[T111_MEDIA_Data]')) IF EXISTS(SELECT 1 FROM sys.views WHERE name='V_MEDIA_DATA') DROP VIEW V_MEDIA_DATA GO CREATE VIEW V_MEDIA_DATA AS SELECT TMD.MediaId AS MEDIAID, TMD.SubClientId AS SUBCLIENTID, TCSC.SubClientName AS SUBCLIENTNAME, TCSC.SubClientCode AS SUBCLIENTCODE, TMD.SubLocationId AS SUBLOCATIONID, TCCS.SubLoctationName AS SUBLOCATIONNAME, TCCS.SubLocationCode AS SUBLOCATIONCODE, TMD.DateId AS DATEID, TMD.MediaType AS MEDIATYPE, TMD.MediaSubType AS MEDIASUBTYPE, TMD.SourceSystemId AS SOURCESYSTEMID, TCSS.SourceSystemName AS SOURCESYSTEMNAME, CONVERT(varchar(50),TMD.Amount) AS AMOUNT FROM T_MEDIA_Data TMD LEFT JOIN T_CSC_SubLocation TCCS ON TMD.SubLocationId=TCCS.SubLocationId LEFT JOIN T_CSC_SubClient TCSC ON TMD.SubClientId=TCSC.SubClientId LEFT JOIN T_CSC_SourceSystem TCSS ON TMD.SourceSystemId=TCSS.SourceSystemId GO
想请问一下在创建view之前,首先要判断它相应的主表是否存在,如果存在就创建对于的view,不存在就不创建,怎么写的 是SQLServer的?我的代码如下,但是不正确的,求高手指点!用的是SQLServer 数据库
IF object_id('dbo.tableName') IS NOT NULL begin .... end
很遗憾的说,不行的,报错误的,兄弟,能帮帮我?
@上浅草涯: 上面的语句在你那能运行吧,是它报错还是其它的,还有具体报什么错呢
@Yu: 都不用运行就报错了,去掉go后就是消息 156,级别 15,状态 1,第 8 行
关键字 'VIEW' 附近有语法错误。
@上浅草涯: create view ,它是只能单独存在于执行语块中的,所以只能以构建字符串的形式去处理了
use Test IF object_id('dbo.Account') IS NOT NULL begin DECLARE @sql NVARCHAR(MAX); set @sql='CREATE VIEW [dbo].[View_3] AS SELECT Receipt FROM dbo.Account'; EXEC sp_executesql @sql; end
@Yu: 非常感谢
IF EXISTS(SELECT * FROM sys.objects o WHERE o.name=@tableName AND o.[type]='U') BEGIN --找到表后,该干嘛干嘛! END GO
@Yu: 都不用运行就报错了,去掉go后就是消息 156,级别 15,状态 1,第 8 行
关键字 'VIEW' 附近有语法错误。
消息 102,级别 15,状态 1,第 4 行
“V_MEDIA_DATA”附近有语法错误。
消息 156,级别 15,状态 1,过程 V_MEDIA_DATA,第 22 行
关键字 'end' 附近有语法错误。
去掉 go后就和第一个错误相同了,我一开始也是以为和你们那样做,后来运行了发现不行的
@上浅草涯: 发现了。create view,必须是查询批次的第一条命令;
那不考虑表存在,如何?表不存在时,视图会自动创建失败...
@幻天芒: 不考虑的话肯定会创建成功的,现在就是想考虑表存在这个
@上浅草涯: 测试了半天,发现动态语句可以执行。
IF EXISTS( SELECT * FROM sys.objects o WHERE o.name = @tableName AND o.[type] = 'U' ) BEGIN EXEC ('create view V_test as select * from ' + @tableName) END GO
@幻天芒: 非常感谢
先判断是否存在该表如果存在进行操作,
IF EXISTS(SELECT * FROM sys.objects s WHERE s.name=@tableName) BEGIN --如果找到标了,就进行view的操作! END GO
和上面所说的一样的错误