set @sql = 'if not exists (select 1
from sysobjects
where id = object_id(''dbo.V_'+@tablename_detail+''')
and type = ''V'')CREATE VIEW dbo.V_'+@tablename_detail+'
AS
SELECT dbo.'+@tablename_detail+'.downmain_id,
dbo.'+@tablename_detail+'.downmain_companyid,
dbo.'+@tablename_detail+'.downmain_songerid,
dbo.'+@tablename_detail+'.downmain_specialid,
dbo.'+@tablename_detail+'.downmain_songid,
dbo.'+@tablename_detail+'.downmain_browse,
dbo.'+@tablename_detail+'.downmain_download,
dbo.'+@tablename_detail+'.downmain_income,
dbo.'+@tablename_detail+'.downmain_date,
dbo.'+@tablename_detail+'.download_source, dbo.c_company.companyName,
dbo.music_song.songname, dbo.music_songer.songerName,
dbo.music_special.specialname, dbo.music_song.addtime
FROM dbo.music_special INNER JOIN
dbo.music_songer INNER JOIN
dbo.stat_downmain_200604 INNER JOIN
dbo.music_song ON
dbo.'+@tablename_detail+'.downmain_songid = dbo.music_song.id ON
dbo.music_songer.id = dbo.'+@tablename_detail+'.downmain_songerid ON
dbo.music_special.id = dbo.'+@tablename_detail+'.downmain_specialid INNER JOIN
dbo.c_company ON
dbo.'+@tablename_detail+'.downmain_companyid = dbo.c_company.id'
exec(@sql)错误提示为view关键字附近有语法错误,查了一下资料,说创建视图必须在一个事务内,因此create前必须有go关键字,如果按照一般的sql语句来创建没问题,现在我是根据if条件来创建视图,请大家帮忙看看!!
from sysobjects
where id = object_id(''dbo.V_'+@tablename_detail+''')
and type = ''V'')CREATE VIEW dbo.V_'+@tablename_detail+'
AS
SELECT dbo.'+@tablename_detail+'.downmain_id,
dbo.'+@tablename_detail+'.downmain_companyid,
dbo.'+@tablename_detail+'.downmain_songerid,
dbo.'+@tablename_detail+'.downmain_specialid,
dbo.'+@tablename_detail+'.downmain_songid,
dbo.'+@tablename_detail+'.downmain_browse,
dbo.'+@tablename_detail+'.downmain_download,
dbo.'+@tablename_detail+'.downmain_income,
dbo.'+@tablename_detail+'.downmain_date,
dbo.'+@tablename_detail+'.download_source, dbo.c_company.companyName,
dbo.music_song.songname, dbo.music_songer.songerName,
dbo.music_special.specialname, dbo.music_song.addtime
FROM dbo.music_special INNER JOIN
dbo.music_songer INNER JOIN
dbo.stat_downmain_200604 INNER JOIN
dbo.music_song ON
dbo.'+@tablename_detail+'.downmain_songid = dbo.music_song.id ON
dbo.music_songer.id = dbo.'+@tablename_detail+'.downmain_songerid ON
dbo.music_special.id = dbo.'+@tablename_detail+'.downmain_specialid INNER JOIN
dbo.c_company ON
dbo.'+@tablename_detail+'.downmain_companyid = dbo.c_company.id'
exec(@sql)错误提示为view关键字附近有语法错误,查了一下资料,说创建视图必须在一个事务内,因此create前必须有go关键字,如果按照一般的sql语句来创建没问题,现在我是根据if条件来创建视图,请大家帮忙看看!!
declare @sql varchar(3000)
declare @tablename_detail varchar(50)
set @tablename_detail = 'tmp'
set @sql = 'if not exists (select 1
from sysobjects
where id = object_id(''dbo.V_'+@tablename_detail+''')
and type = ''V'')
BEGIN
declare @defview varchar(1000)
set defview = ''
CREATE VIEW dbo.V_'+@tablename_detail+'
AS
SELECT dbo.'+@tablename_detail+'.downmain_id,
dbo.'+@tablename_detail+'.downmain_companyid,
dbo.'+@tablename_detail+'.downmain_songerid,
dbo.'+@tablename_detail+'.downmain_specialid,
dbo.'+@tablename_detail+'.downmain_songid,
dbo.'+@tablename_detail+'.downmain_browse,
dbo.'+@tablename_detail+'.downmain_download,
dbo.'+@tablename_detail+'.downmain_income,
dbo.'+@tablename_detail+'.downmain_date,
dbo.'+@tablename_detail+'.download_source, dbo.c_company.companyName,
dbo.music_song.songname, dbo.music_songer.songerName,
dbo.music_special.specialname, dbo.music_song.addtime
FROM dbo.music_special INNER JOIN
dbo.music_songer INNER JOIN
dbo.stat_downmain_200604 INNER JOIN
dbo.music_song ON
dbo.'+@tablename_detail+'.downmain_songid = dbo.music_song.id ON
dbo.music_songer.id = dbo.'+@tablename_detail+'.downmain_songerid ON
dbo.music_special.id = dbo.'+@tablename_detail+'.downmain_specialid INNER JOIN
dbo.c_company ON
dbo.'+@tablename_detail+'.downmain_companyid = dbo.c_company.id' + '''' + '
EXEC(@defview)
END'
--print @sql
exec(@sql)
declare @tablename_detail varchar(50)
set @tablename_detail = 'tmp'
set @sql = 'if not exists (select 1 from sysobjects where id = object_id(''dbo.V_'+@tablename_detail+''')and type = ''V'')'
--print @sql
BEGIN
declare @defview varchar(1000)
set @defview = ''
select @defview='
CREATE VIEW dbo.V_'+@tablename_detail+'
AS
SELECT dbo.'+@tablename_detail+'.downmain_id,
dbo.'+@tablename_detail+'.downmain_companyid,
dbo.'+@tablename_detail+'.downmain_songerid,
dbo.'+@tablename_detail+'.downmain_specialid,
dbo.'+@tablename_detail+'.downmain_songid,
dbo.'+@tablename_detail+'.downmain_browse,
dbo.'+@tablename_detail+'.downmain_download,
dbo.'+@tablename_detail+'.downmain_income,
dbo.'+@tablename_detail+'.downmain_date,
dbo.'+@tablename_detail+'.download_source, dbo.c_company.companyName,
dbo.music_song.songname, dbo.music_songer.songerName,
dbo.music_special.specialname, dbo.music_song.addtime
FROM dbo.music_special INNER JOIN
dbo.music_songer INNER JOIN
dbo.stat_downmain_200604 INNER JOIN
dbo.music_song ON
dbo.'+@tablename_detail+'.downmain_songid = dbo.music_song.id ON
dbo.music_songer.id = dbo.'+@tablename_detail+'.downmain_songerid ON
dbo.music_special.id = dbo.'+@tablename_detail+'.downmain_specialid INNER JOIN
dbo.c_company ON
dbo.'+@tablename_detail+'.downmain_companyid = dbo.c_company.id'
--print @defview
EXEC(@defview)
ENDexec(@sql)
--建立存储过程
create proc create_view
@tablename varchar(100),
@view varchar(100)
as
begin tran
if not exists(select name from sysobjects where name = @tablename and type = 'v')
exec('create view dbo.'+@view+' as
select * from '+@tablename
)
commit tran
go--建立测试数据
CREATE TABLE [t1] ([id] [int] IDENTITY (1, 1) NOT NULL ,[col] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
insert into t1 select 23--执行
exec dbo.create_view t1,viewt1