2012-08-09 20 views
5

Aşağıdaki SQL sahip toplu tek deyim olmalıdır:'VIEW oluşturma'

Yanlış sözdizimi: şu mesajı alıyorum

ALTER PROCEDURE [dbo].[usp_gettasks] 
    @ID varchar(50) 

    AS 
    declare @PDate Date 


    WHILE (DATEPART(DW, @PDate) = 1 OR DATEPART(DW, @PDate) = 7) 
    BEGIN 

     set @PDate = DATEADD(day, 1, @PDate) 

    END 

    CREATE VIEW tblList AS 

    select tt.ItemOrder,tt.DisplayVal, DATEADD(day, tt.DaysDue, @PDate) from tblLine tt 
    where tt.ID = 1 

'VIEW oluşturma' olmalı toplu tek deyimi

Ben Create View önce GO koyarak çalıştı, ancak o zaman PDate değerini tanımıyor.

+2

Saklı yordamda neden görünüm oluşturuyorsunuz? –

cevap

10

Saklı yordamda bir görünüm oluşturmak için, bunu dinamik SQL'de yapmanız gerekir (özellikle de görünümün kendisi bir değişkene sahip olamadığı için).

DECLARE @sql NVARCHAR(MAX); 
SET @sql = 'CREATE VIEW dbo.tblList 
    AS 
     SELECT ItemOrder, DisplayVal, 
     SomeAlias = DATEADD(DAY, DaysDue, ''' + CONVERT(CHAR(8), @PDate, 112) 
     + ''') FROM dbo.tblLine WHERE ID = 1;'; 
EXEC sp_executesql @sql; 

Ama bu saklı yordam ikinci kez çağrı kez, dbo.tblList adında bir görünüm oluşturmak için çalışıyoruz çünkü, başarısız olacak ve bu görünüm zaten var. Belki de, "saklanmış bir prosedürde bir görünüm yaratmak istiyorum" dan daha yüksek bir seviyede çalıştığınız şeyi detaylandırabilirsiniz.

+1

"EĞER OLMADIĞINIZDA (1 TOM bilgi_kredi.columns WHERE TABLE_NAME = 'tblList') BEGIN CREATE VIEW ... END" ifadesini kullanarak yaratmayı engelleyebilir. Bunu yapmaya çalışıyorum, ama aynı hatayı What @NatePet'den aldım. Bütün ifadeyi bir dizeye koymaya ihtiyacım var mı? ALTER VIEW neden böyle davranıyor? –