Aracılığıyla paylaş


MSSQLSERVER_4186

Ayrıntılar

Ürün adı

SQL Server

Ürün sürümü

10.50

Ürün yapı numarası

 

Olay Kimliği

4186

Olay kaynağı

MSSQLSERVER

Bileşen

SQLEngine

Simgesel ad

 

İleti metni

Sütun ' % ls.%. * ls' çünkü sütun tanımı bir alt sorgu içeren ya da kullanıcı veya sistem veri erişimi gerçekleştiren bir işlev başvuruları output yan tümce başvuru yapılamaz.Bir işlev , schemabound ise, veri erişimi gerçekleştirmek için varsayılan olarak kabul edilir.output yan tümce sütun kaldırma veya alt sorgu veya işlev sütun tanımından kaldırma düşünün.

Açıklama

FUNCTION davranışı engellemek için output yan tümce bir görünüm veya satır içi tablo sütun başvuru yapamazsınız-değerli işlev bu sütun aşağıdaki yöntemlerden birini kullanarak tanımlandığında:

  • alt sorgu.

  • Kullanıcı veya sistem veri erişimi gerçekleştiren ya da bu tür yapmak için kabul edilir bir kullanıcı tanımlı işlev .

  • Kullanıcı veya sistem veri erişimi, tanımında gerçekleştiren bir kullanıcı tanımlı işlev içeren bir hesaplanan sütun .

Örnekler

Alt sorgu tarafından tanımlanan görünümü sütunu

Aşağıdaki örnek, kullanan bir alt sorgu seçme listesinde sütuntanımlamak bir görünüm oluştururState. Sonra bir update deyim başvuran State yan tümce çıktısütun için başarısız olur ve ob alt sorgu select listesi.

USE AdventureWorks2008R2;
GO
CREATE VIEW dbo.V1
AS
    SELECT City,
-- subquery to return the State name
           (SELECT Name FROM Person.StateProvince AS sp 
            WHERE sp.StateProvinceID = a.StateProvinceID) AS State
    FROM Person.Address AS a;
GO
--Reference the State column in the OUTPUT clause of an UPDATE statement
UPDATE dbo.V1 
SET City = City + 'Test' 
OUTPUT deleted.City, deleted.State, inserted.City, inserted.State
WHERE State = 'Texas';
GO

Bir işlev tarafından tanımlanmış görünümü sütunu

Aşağıdaki örnek, skalerişlevveri kullanan bir görünüm oluştururdbo.ufnGetStock sütuntanımlamak için Seç listesinde CurrentInventory. Sonra bir update deyim başvuran CurrentInventory yan tümce çıkışsütun .

USE AdventureWorks2008R2;
GO
CREATE VIEW Production.ReorderLevels
AS
    SELECT ProductID, ProductModelID, ReorderPoint,
           dbo.ufnGetStock(ProductID) AS CurrentInventory
    FROM Production.Product;
GO

UPDATE Production.ReorderLevels
SET ReorderPoint += CurrentInventory
OUTPUT deleted.ReorderPoint, deleted.CurrentInventory,
       inserted.ReorderPoint, inserted.CurrentInventory
WHERE ProductModelID BETWEEN 75 and 80;

Kullanıcı eylemi

Aşağıdaki yollardan biriyle 4186 hata düzeltilebilir:

  • Birleşim yerine alt sorgu görünüm veya işlev sütun tanımlamak için kullanın.Görünümü yeniden yazabilirsiniz Örneğin, dbo.V1 olarak şu şekilde.

    USE AdventureWorks2008R2;
    GO
    CREATE VIEW dbo.V1
    AS
        SELECT City, sp.Name AS State
        FROM Person.Address AS a 
        JOIN Person.StateProvince AS sp 
        ON sp.StateProvinceID = a.StateProvinceID;
    
  • Kullanıcı tanımlı işlevtanımını inceleyin.Kullanıcı veya sistem veri erişimi işlev gerçekleştirmez, ema BALAMA ile yan tümceeklemek için işlev alter.

  • sütun çıkış yan tümcetümcesinden kaldırın.

Ayrıca bkz.

Başvuru