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

时间:2014-10-13 11:36:42

标签: sql tsql sybase-iq

所以我创建了一个使用动态SQL创建动态视图的过程,但是我使用了两个sql执行:一个用于if子句,一个用于else,它应该可以将它全部放在一个SQL字符串下或者我是错误?因为我试了一遍又一次得到错误。我不是写动态sql的最好的,所以这可能是我的错误或者它不能完成而且我在试图这样做时会浪费时间吗?

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

if exists(select 1 from sp_iqview('v_anon_' + @table_name) where view_name = 'v_anon_' + @table_name)
begin
set@ sqlQuery = ('drop view ' + 'v_anon_' + @table_name)
EXECUTE(@sqlQuery)
end

else
  begin
set@ sqlQuery = ('CREATE VIEW ' + 'v_anon_' + @table_name + ' AS SeLECT * FROM ' + @table_name)
EXECUTE(@sqlQuery)
select@ sqlQuery
end
END

2 个答案:

答案 0 :(得分:1)

尝试此查询....其他语句不是必需的....如果对象存在,它将在第一步本身中删除。如果没有,它会创建一个......

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

答案 1 :(得分:0)

您需要在两个语句之间进行操作,但动态SQL不支持GO关键字,因为它不是有效的T-SQL。你需要单独执行它们......

但是你可以添加go然后再使用我想的解决方案...

Execute Dynamic Query with go in sql