2017-10-05 10 views
0

OPENQUERY을 사용하여 연결된 서버에서 여러 테이블을 만들고 싶습니다.OPENQUERY를 사용하여 연결된 테이블에 테이블을 만드는 방법은 무엇입니까?

기본적으로 연결된 서버 (ServerB)에서 실행되는 테이블 (TableA)을 채우는 쿼리가 있습니다. 다른 서버 (ServerA)가 연결된 서버로 다른 서버 (ServerA)에서이 쿼리를 실행하는 방법을 찾고 있습니다.

그래서이 쿼리를 실행하려고 시도 할 때 ServerA이 발생하지만 쿼리가 너무 길어서 약 8 개의 다른 쿼리로 나누어야했습니다. 이를 위해 나는 각각의 깨진 쿼리의 결과를 테이블 (Table1, Table2 등)에 넣어야한다. 완료되면 테이블을 삭제할 것입니다.이 쿼리는 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.

나는이 시도했습니다를 :

,369 : 나에게 오류를 제공
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));'') ') 

연결된 서버 (서버 B)에서 테이블을 생성하지 않습니다 또한 나에게 오류를 제공하지

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') 

을하지만, : 1,363,210

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.

그래서 나는 다음이 시도됩니다.

는 또한 두 가지를 시도했지만 한이 같은 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을 사용하여 테이블을 만들려고 시도했지만 마지막 두 예제와 동일한 결과를 얻습니다.

답변

1

당신은 RPC 오류를 들어

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

AT ... EXEC를 사용하려고 할 수 있습니다. 난 그냥 시도

enter image description here

+0

당신은 OUT RPC를 활성화 할 수 있습니다, 그 나는 IP가 그냥 연결된 서버 목록에서 해당를 찾을 수 있다고 말했다 있기 때문에 서버 이름을 사용했다하지만. 내 첫 번째 예제에서와 같은 오류 메시지가 발생합니다 : '서버'SQLINFWWDVP07 'RPC 용으로 구성되어 있지 않습니다.' – Mike

+1

@ 마이크, RPC 오류에 대해서만 RPC OUT을 활성화해야합니다. 그렇지 않으면 원격 서버를 쓸 수 없습니다. –

+0

Perfect, 그게 효과가! – Mike