Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用OPENQUERY在链接表中创建表?_Sql Server_Linked Server_Openquery - Fatal编程技术网

Sql server 如何使用OPENQUERY在链接表中创建表?

Sql server 如何使用OPENQUERY在链接表中创建表?,sql-server,linked-server,openquery,Sql Server,Linked Server,Openquery,我想使用OPENQUERY在链接服务器中创建几个表 基本上,我有一个查询,它填充在链接服务器(ServerB)上运行的表(TableA)。我正在研究从另一台服务器(ServerA)运行此查询的方法,该服务器将另一台服务器(ServerB)作为链接服务器 所以我在ServerA中尝试运行这个查询,但是查询太长了,所以我不得不缩短它,并将它分成8个不同的查询。为此,我需要将每个细分查询的结果放入表中(表1、表2等)。完成后,我将删除这些表,因为只有从ServerA运行此查询时才需要它们 我在互联网上

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

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

所以我在ServerA中尝试运行这个查询,但是查询太长了,所以我不得不缩短它,并将它分成8个不同的查询。为此,我需要将每个细分查询的结果放入表中(表1、表2等)。完成后,我将删除这些表,因为只有从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;
这给了我一个错误:

未为RPC配置服务器“SQLINFWWDVP07”

我试过这个:

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));'') ')
这给了我一个错误:

无法处理该对象(然后是整个查询)。链接服务器“SQLINFWWDVP07”的OLE DB提供程序“SQLNCLI11”表示该对象没有列,或者当前用户对该对象没有权限

那么我就试试这个:

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)中创建表

我也尝试了两种方法,但没有像这样的
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
在链接服务器中创建表


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

您可以尝试在

EXEC ('create table tempdb.dbo.t(id int)') At [192.1.1.2]
对于RPC错误。您可以启用RPC输出


我只是尝试了一下,虽然我不得不使用服务器名称,因为IP只是说它在链接的服务器列表中找不到服务器名称。我收到了与上面第一个示例相同的错误消息:
服务器'SQLINFWWDVP07'没有为RPC配置。
@Mike,对于RPC错误,您只需要启用RPC OUT,否则您无法编写远程服务器服务器