Объединение двух динамических операторов SQL в один

Итак, я создал процедуру, которая создает динамическое представление с использованием динамического 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


person theweeknd    schedule 13.10.2014    source источник
comment
Может быть, чтобы добавить что-нибудь о процедуре, она делает вид любой таблицы, которая есть в вашей базе данных, если она выполняется.   -  person theweeknd    schedule 13.10.2014


Ответы (2)


попробуйте этот запрос .... Здесь оператор else не требуется .... если объект существует, он будет удален на первом шаге. Если нет, он создает новый ...

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
person pyborg    schedule 13.10.2014
comment
Да, это тоже именно то, что мне нужно, спасибо m8 .... Забавно, что вы не видите самых простых вещей, а они имеют такое большое значение: / - person theweeknd; 14.10.2014

Вам понадобится переход между двумя операторами, но динамический SQL не поддерживает ключевое слово GO, так как он не является допустимым T-SQL. Вам нужно будет выполнить их отдельно ...

Однако вы могли бы добавить go, а затем пойти с предложенным здесь решением, я полагаю ...

Выполнить динамический запрос с переходом в sql

person dandcg    schedule 13.10.2014
comment
спасибо, это тоже полезно знать, но вам не нужно разделять, если существует, а еще с GO, Venkat G дал решение того, что мне нужно, потому что я просто хотел, чтобы sql выполнялся, если существует, отбрасывать, создавать один за другим, каждый раз, и я подумал, что мне нужно поместить все это в одну строку (если существует, отбросить, создать), но в этом не было необходимости. - person theweeknd; 14.10.2014
comment
Если существует, то нет, но отбросьте и создайте да ... В вопросе указано, что «должно быть возможно поместить все в одну строку SQL» ... Так что не уверен, как первый ответ разрешает ваш исходный вопрос. Но рад, что у вас все получилось ... - person dandcg; 14.10.2014