在 SELECT 返回记录的地方,INSERT 不会返回结果集,除了受影响的记录数以外。可以使用 SET NOCOUNT ON 来抑制这种情况; 然而,我不确定抑制是否指可见性还是实际传输的行数。
INSERT INTO OPENQUERY(MYSERVER, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [Blah].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
(1 row(s) affected)
关于从INSERT语句中返回记录,唯一的方法是使用OUTPUT子句。客户端无法访问OUTPUT INSERTED行,因此不能返回它们。如果尝试运行以下代码,将会收到一个错误:
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.
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'
INSERT INTO OPENQUERY(MyServer, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [MyServer].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
INSERT
中的SELECT
将在链接服务器上执行选择并返回结果集。您能否更正您的句子“插入检索首先记录集”-它不仅会获取第一行,而是获取选择查询返回的任何内容。 - Abs