以下の手順はSQLServer2005では正常に実行されますが、2008年には...で失敗しました。Invalid object name 'vTemp'
Create PROCEDURE [dbo].[bulksaverecord]
as
begin
if exists (select * from sysobjects where id=object_id('vTemp'))
begin
drop view vTemp
end
declare @sql nvarchar(max)
set @sql='CREATE VIEW vTemp AS SELECT top 0 FromType,TypeID,AssessUser,
TypeTimeType,AssessTime,ItemRoleKey,UserName,SourceKey,
PartID,PartName,PositionName,ItemID,ItemName,ItemType,ItemScript,
ItemDataSourceName,ItemField,ItemKPI,ItemFun,ItemFunLimit,ItemKill,
AllKill,ItemMark,ItemPower,MarkScript,PowerScript,FromKey
FROM AssessMark'
exec sp_executesql @sql
if exists (select * from sysobjects where id=object_id('vTemp'))
begin
exec ('SELECT * FROM vTemp')
SELECT * FROM vTemp -- throws the error here
end
end
PROCEDUREで動的SQLを使用して作成されたVIEWは、実際にはVIEWが作成されていても、DYNAMICSQLにスコープを持っているようです。