0

そこで、動的 SQL を使用して動的ビューを作成する手順を作成しましたが、SQL 実行を 2 回使用しました。私はそれを試して、何度も何度もエラーを取得したためです。私は動的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

4

2 に答える 2

1

このクエリを試してください....ここでは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
于 2014-10-13T12:11:06.293 に答える
0

2 つのステートメントの間を行き来する必要がありますが、動的 SQL は有効な T-SQL ではないため、GO キーワードをサポートしていません。それらを個別に実行する必要があります...

ただし、 go を追加してから、ここで提案されているソリューションを使用することもできます...

go in sqlで動的クエリを実行する

于 2014-10-13T12:00:44.870 に答える