将两个动态SQL语句合并为一个

将两个动态SQL语句合并为一个,sql,tsql,sap-iq,Sql,Tsql,Sap Iq,因此,我制作了一个使用动态SQL生成动态视图的过程,但我使用了两个SQL执行:一个用于if子句,另一个用于else,应该可以将其全部放在一个SQL字符串下,还是我错了?因为我试了一遍又一遍地出错。我不是写动态sql的高手,所以这可能是我的错误,或者说我不能做到,我在尝试做这件事上浪费了时间 创建过程测试视图 @表\u名称varchar30 像 开始 声明@sqlQuery varchar100 如果存在,请从sp_iqview'v_anon_'+@table_name中选择1,其中view_n

因此,我制作了一个使用动态SQL生成动态视图的过程,但我使用了两个SQL执行:一个用于if子句,另一个用于else,应该可以将其全部放在一个SQL字符串下,还是我错了?因为我试了一遍又一遍地出错。我不是写动态sql的高手,所以这可能是我的错误,或者说我不能做到,我在尝试做这件事上浪费了时间

创建过程测试视图 @表\u名称varchar30 像 开始 声明@sqlQuery varchar100 如果存在,请从sp_iqview'v_anon_'+@table_name中选择1,其中view_name='v_anon_'+@table_name 开始 set@sqlQuery='drop view'+'v_anon'+@table_name EXECUTE@sqlQuery 终止 其他的 开始 将@sqlQuery='CREATE VIEW'+'v_anon'+@table_name+'设置为SeLECT*FROM'+@table_name' EXECUTE@sqlQuery 选择@sqlQuery 终止
END您需要在这两个语句之间执行go,但是动态SQL不支持go关键字,因为它不是有效的t-SQL。你需要分别执行它们

然而,你可以添加go,然后使用这里提出的解决方案,我想


请尝试此查询。。。。此处不需要其他声明。。。。如果对象存在,它将在第一步中自动下降。如果没有,它将创建一个新的

create procedure test_view
  (@table_name varchar(30))
as
BEGIN
declare @DropQuery varchar(100)
declare @CreateQuery varchar(100)

IF EXISTS(select 1 from sp_iqview('v_anon_' + @table_name) where view_name = 'v_anon_'  + @table_name)
BEGIN
SET @DropQuery= 'drop view v_anon_' + @table_name
EXEC sp_executesql @DropQuery
END



SET @CreateQuery = 'CREATE VIEW  v_anon_' + @table_name + ' AS SeLECT * FROM ' + @table_name
EXEC sp_executesql @CreateQuery 
SELECT @CreateQuery 

END

也许要添加一些关于这个过程的内容,她会查看数据库中的任何表(如果执行的话)。是的,这也正是我所需要的,thx m8。。。。有趣的是,你怎么看不到最简单的东西,它们有这么大的不同:/thx这也很有用,但你不需要区分if exists和else with GO,Venkat G已经给出了我需要的解决方案,因为我只想sql在存在时执行,每次都删除,一个接一个地创建,我想我需要把所有这些放在一个字符串中,如果存在,删除,创建,但这不是必需的。如果不存在,但删除,创建是。。。问题指定了“应该可以将其全部放在一个SQL字符串下”。。。所以我不确定第一个答案是如何解决你原来的问题的。但很高兴你让它工作了。。。