如何使用 OPENQUERY 在链接的 table 中创建 table?

How to create tables in a linked table using OPENQUERY?

我想使用 OPENQUERY 在链接服务器中创建几个 table。

基本上,我有一个查询,它填充链接服务器 (ServerB) 上的 运行 的 table (TableA)。我正在研究从另一台服务器 (ServerA) 将另一台 (ServerB) 作为链接服务器的 运行 此查询的方法。

所以我有 ServerA 我正在尝试 运行 这个查询,但是查询最终太长了所以我不得不缩短它并且将其分解为大约 8 个不同的查询。为此,为了工作,我需要将每个分解查询的结果放入 tables(表 1、表 2 等)中。完成后,我将删除 tables,因为只有当此查询是来自 ServerA.

的 运行 时才需要它们

我在互联网上四处寻找,试图找到一种我试过的有效方法:

DECLARE @table NVARCHAR(MAX), @sql NVARCHAR(MAX);
DECLARE @LinkedServerName nvarchar(100)
DECLARE @LinkedDbName nvarchar(100)
SET @LinkedServerName = 'SQLINFWWDVP07'
SET @LinkedDbName = 'Varasset'
SET @table = N'CREATE TABLE dbo.WOResults(id INT NULL);';
SET @sql = N'EXEC ' + QUOTENAME(@LinkedServerName) + N'.' 
  + QUOTENAME(@LinkedDbName) + N'.sys.sp_executesql @table;';
EXEC sys.sp_executesql @sql, N'@table NVARCHAR(MAX)', @table;

这给了我错误:

Server 'SQLINFWWDVP07' is not configured for RPC.

我试过这个:

SELECT * FROM OPENQUERY(SQLINFWWDVP07,'
exec (''create table [ext].[WOResults]([Id] uniqueidentifier,[AltWorkOrderId] nvarchar(50),[WORK ORDER STATUS] nvarchar(30),[DESCRIPTION] nvarchar(200),
    [STATE] uniqueidentifier,[PROJ APVL] nvarchar(30),[EST COMP] nvarchar(30),[ACT COMP] nvarchar(30),[cd_M6OrderNo] nvarchar(50),[CDD Date] nvarchar(30),
    [FinancialProject] uniqueidentifier,[AssignedLocation] uniqueidentifier,[PROJ TYPE] uniqueidentifier,[CLASS OF PLANT] uniqueidentifier,
    [Justification Code] uniqueidentifier,[CLOSING NOTES] nvarchar(MAX),[READY FOR SERVICE EST] nvarchar(30),[READY FOR SERVICE ACT] nvarchar(30),
    [EOJ] nvarchar(30),[AUDIT PICK] nvarchar(30),[AUDIT COMP] nvarchar(30),[AUDIT STATUS] nvarchar(100),[FullyReceivedDate] nvarchar(30),
    [% MTL RECEIVED] decimal(18,5),[ASSIGNED USER] nvarchar(200),[WORK ORDER NOTES] nvarchar(MAX));'') ')

这给了我错误:

Cannot process the object " (Then the whole of the query) The OLE DB provider "SQLNCLI11" for linked server "SQLINFWWDVP07" indicates that either the object has no columns or the current user does not have permissions on that object.

所以我会试试这个:

SELECT * FROM OPENQUERY(SQLINFWWDVP07,'
exec (''create table [ext].[WOResults]([Id] uniqueidentifier,[AltWorkOrderId] nvarchar(50),[WORK ORDER STATUS] nvarchar(30),[DESCRIPTION] nvarchar(200),
    [STATE] uniqueidentifier,[PROJ APVL] nvarchar(30),[EST COMP] nvarchar(30),[ACT COMP] nvarchar(30),[cd_M6OrderNo] nvarchar(50),[CDD Date] nvarchar(30),
    [FinancialProject] uniqueidentifier,[AssignedLocation] uniqueidentifier,[PROJ TYPE] uniqueidentifier,[CLASS OF PLANT] uniqueidentifier,
    [Justification Code] uniqueidentifier,[CLOSING NOTES] nvarchar(MAX),[READY FOR SERVICE EST] nvarchar(30),[READY FOR SERVICE ACT] nvarchar(30),
    [EOJ] nvarchar(30),[AUDIT PICK] nvarchar(30),[AUDIT COMP] nvarchar(30),[AUDIT STATUS] nvarchar(100),[FullyReceivedDate] nvarchar(30),
    [% MTL RECEIVED] decimal(18,5),[ASSIGNED USER] nvarchar(200),[WORK ORDER NOTES] nvarchar(MAX));'') 
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''ext'' AND TABLE_NAME = ''WOResults'') 
BEGIN select ''Table Created'' END')

这没有给我任何错误,但也不会在链接服务器 (ServerB) 中创建 table。

我也试过这两种方法,但没有像这样的 exec

SELECT * FROM OPENQUERY(SQLINFWWDVP07,'
create table [ext].[WOResults]([Id] uniqueidentifier,[AltWorkOrderId] nvarchar(50),[WORK ORDER STATUS] nvarchar(30),[DESCRIPTION] nvarchar(200),
    [STATE] uniqueidentifier,[PROJ APVL] nvarchar(30),[EST COMP] nvarchar(30),[ACT COMP] nvarchar(30),[cd_M6OrderNo] nvarchar(50),[CDD Date] nvarchar(30),
    [FinancialProject] uniqueidentifier,[AssignedLocation] uniqueidentifier,[PROJ TYPE] uniqueidentifier,[CLASS OF PLANT] uniqueidentifier,
    [Justification Code] uniqueidentifier,[CLOSING NOTES] nvarchar(MAX),[READY FOR SERVICE EST] nvarchar(30),[READY FOR SERVICE ACT] nvarchar(30),
    [EOJ] nvarchar(30),[AUDIT PICK] nvarchar(30),[AUDIT COMP] nvarchar(30),[AUDIT STATUS] nvarchar(100),[FullyReceivedDate] nvarchar(30),
    [% MTL RECEIVED] decimal(18,5),[ASSIGNED USER] nvarchar(200),[WORK ORDER NOTES] nvarchar(MAX))
IF  EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''ext'' AND TABLE_NAME = ''WOResults'') 
BEGIN select ''Table Created'' END')

并得到相同的结果。

有没有办法使用 OPENQUERY 在链接服务器中创建 table?

我也尝试过使用 select * into 创建 table 但会得到与最后两个示例相同的结果。

你可以尝试使用EXEC ... AT

EXEC ('create table tempdb.dbo.t(id int)') At [192.1.1.2]

对于 RPC 错误。你可以启用 RPC OUT