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,否则您无法编写远程服务器服务器