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.