0

以下の手順は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にスコープを持っているようです。

4

3 に答える 3

1

このテストスクリプトは私のために繰り返し動作します:

if object_id('TestProc') is not null
    drop procedure TestProc
if object_id('TestView') is not null
    drop view TestView
go
create proc TestProc
as
exec ('create view TestView as select 1 as a')
select * from TestView
go
exec TestProc

Gordon Linoffが答えたように、ビューの定義を再確認しますか?

于 2013-03-25T19:34:59.753 に答える
1

ビュー定義を次のように変更すると、SQLServer2008のインストールで手順が正常に機能します。

select * from information_schema.tables

ビューの定義に問題があると思われます。

于 2013-03-25T19:35:47.043 に答える
0

ありがとうございました!私はその理由を見つけました。

私は変更します:dbo.viewを作成するためにビューを作成します。問題はなくなりました。それで

于 2013-03-26T08:27:21.960 に答える