2013-03-25 40 views
0

下面的程序將運行在SQL Server 2005中確定,但在2008年... Invalid object name 'vTemp'SQL Server 2008中不能使用動態SQL創建的視圖手續

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,在DYNAMIC SQL中將有一個範圍,即使VIEW實際上已創建。

+0

如果你想要一個臨時表,爲什麼你不使用一個?視圖並不意味着是模擬對象。 – HLGEM 2013-03-25 19:31:29

回答

0

謝謝!我找到了原因。

我改變了:創建視圖來創建dbo.view,問題沒有了。 所以

+0

因此,任何人都需要注意您當前的SQL帳戶的權利。我遇到這個問題,因爲我目前的SQL帳戶不是dbo,所以創建視圖會創建一個視圖,而不是dbo.view。如果你正確設置你的sql acount,你將不會看到這個問題。我希望這會幫助別人。 – ivanchain 2013-04-10 01:45:24

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 

像戈登·利諾夫回答,請仔細檢查您的視圖定義?

select * from information_schema.tables 

我懷疑你有你的觀點定義一個問題:當我修改視圖定義是

1

你的程序工作在我安裝的SQL Server 2008的罰款。

相關問題