Aracılığıyla paylaş


MSSQLSERVER_4186

Ayrıntılar

Ürün adı

SQL Server

Ürün sürümü

11.0

Ürün oluşturma numarası

 

Olay kimliği

4186

Olay kaynağı

MSSQLSERVER

Bileşen

SQLEngine

Simgesel ad

 

İleti metni

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

Açıklama

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

  • Alt sorgu.

  • Kullanıcı veya sistem veri erişimi gerçekleştiren ya da böyle yapmak için kabul edilir bir kullanıcı tanımlı işlevi.

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

Örnekler

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

Aşağıdaki örnek, bir alt sorgu seçme listesinde sütun tanımlamak için kullandığı bir görünüm oluşturur State. Bir update deyimi başvuran Stateoutput yan sütunda ve başarısız olur ob alt sorgu seçme listesinde.

USE AdventureWorks2012;
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

USE AdventureWorks2012;
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ımlanan görünüm sütunu

Aşağıdaki örnek, veri erişimi, skalar işlev kullanan bir görünüm oluşturur dbo.ufnGetStock sütun tanımlamak için seçme listesinde CurrentInventory. Bir update deyimi başvuran CurrentInventoryoutput yan sütunda.

USE AdventureWorks2012;
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;

USE AdventureWorks2012;
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

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

  • Birleşimler yerine alt sorgu, görünüm veya işlevin sütun tanımlamak için kullanın. Örneğin, görünümü yeniden yazabilirsiniz dbo.V1gibi.

    USE AdventureWorks2012;
    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;
    
    USE AdventureWorks2012;
    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şlevin tanımını inceleyin. Kullanıcı veya sistem veri erişimi işlevini gerçekleştirmez, WITH SCHEMABINDING yan tümcesi eklemek için işlevini değiştirebilirsiniz.

  • Sütun output yan tümcesini kaldırın.

Ayrıca bkz.

Başvuru

output Yantümcesi (Transact-sql)