SELECT kayıtları kaydederse, INSERT etkilenen kayıt sayısı haricinde bir sonuç kümesi döndürmez. Bu SET NOCOUNT ON kullanılarak bastırılabilir; Ancak, bastırmaların görünürlük veya gerçekte gelen satır sayısı anlamına geleceğinden emin değilim. kayıtlar gelince
INSERT INTO OPENQUERY(MYSERVER, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [Blah].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
(1 row(s) affected)
bir ÇIKIŞ maddesini kullanmak, INSERT gelen gerçekleşmesi için tek yolu, iade edilen. İstemci makinesinin OUTPUT INSERTED satırlarına erişimi olmayacak, böylece bunlar iade edilemez. aşağıdakileri çalıştırmayı denerseniz, bir hata alırsınız:
INSERT INTO OPENQUERY(MYSERVER, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [BLAH].[dbo].[SQL_Drives]')
OUTPUT INSERTED.*
SELECT 'X', 2, 'MyServer'
Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.
-- EDIT RESULTS OF PROFILER ---------------------------
-- Statements that occured on server called through OPENQUERY
exec sp_cursoropen @p1 output,N'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [MyServer].[dbo].[SQL_Drives]',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5
exec sp_cursor 180150009,4,0,N'[MyServer].[dbo].[SQL_Drives]',@Drive_Letter='X',@MBFree=2,@Server='MyServer'
--Statements that occured on client
INSERT INTO OPENQUERY(MyServer, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [MyServer].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
Sadece FYI: İkinci örnekte dört bölümlü adlandırma sözdizimi yalnızca Bağlantılı Sunucu türü Dağıtılmış İşlemlere kaydedilmişse çalışır. (Çoğu, sadece bir işarettir.) –
İlk sorgunuzla, sütunları bir seçim yoluyla belirtmeden eklenecek sütunları nasıl belirliyorsunuz? – Abs
Tam inserti sadece sütunları kimlik verileri veya varsayılan verilerle birlikte bırakıyorum (çoğu zaman varsayılan verileri de yazarım). Genellikle, tüm kayıt kümesini bir veri parçası olarak yazdığı gibi eklemek için daha hızlıdır. Açık sorgu, kodların yerleştirme düzeninde olduğunu varsayar (normal insert gibi). Doğru: ardışık olmayan cols'ları tercih etmeniz gerekiyorsa, seçmeyi kullanmanız gerekir, ancak performans – Zelloss