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.