문제

저장된 프로 시저 (SP)를 한 SQL 서버에서 다른 SP (SP)로 복사 해야하는 경우 SSMS의 SP를 마우스 오른쪽 버튼으로 클릭하고> 새 쿼리 편집기 창을 작성하여 스크립트 저장 프로 시저를 선택하십시오. 그런 다음 해당 창을 마우스 오른쪽 버튼으로 클릭하고 연결> 연결 변경 ... 그런 다음 새 서버 및 F5를 선택하여 새 서버에서 작성을 실행하여 연결을 변경합니다.

그래서 내 질문은 "다른 SQL 서버에 연결하려는 T-SQL 구문은 무엇입니까?"입니다. Create Script의 상단에 붙여 넣을 수 있으므로 F5를 실행하여 실행하면 새 서버로 전환하여 작성 스크립트를 실행할 수 있습니다.

질문을 입력하는 동안 나는 내가 당신에게 내가하려는 일에 대한 배경을 주면 당신이 이것을 달성하기 위해 더 빠르고 더 나은 방법을 생각해 낼 수 있다는 것을 깨달았습니다.

도움이 되었습니까?

해결책

또한 링크 된 서버와 관련된 쿼리를 작성할 때 다음과 같은 브래킷이 포함되어 있는지 확인하십시오.

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]

적어도 2000/2005 년에 최소한 서버 이름 주위에 [] 괄호가 필요하다는 것을 알았습니다.

다른 팁

SQL Server Management Studio에서 쿼리 메뉴에서 SQLCMD 모드를 켭니다. 그런 다음 스크립트 상단에 아래 명령을 입력하십시오.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]

여러 서버에 연결하는 경우 삽입해야합니다. GO 연결 사이; 그렇지 않으면 T-SQL이 서버에서 실행되지 않습니다.

업데이트 : 다른 SQL 서버에 연결하고 SQL 문을 실행하려면 사용해야합니다. SQLCMD 유틸리티. 이것은 일반적으로 배치 파일로 수행됩니다. 이것을 결합 할 수 있습니다 xmp_cmdshell Management Studio 내에서 실행하려는 경우.


한 가지 방법은 a를 구성하는 것입니다 연결된 서버. 그런 다음 링크 된 서버와 데이터베이스 이름을 테이블 이름에 추가 할 수 있습니다. (선택 *에서 linkedserver.database.dbo.tablename)

USE master
GO
EXEC sp_addlinkedserver 
    'SEATTLESales',
    N'SQL Server'
GO

질문을 역설해야한다면 DDL에서 쿼리 실행을 위해 서버 컨텍스트를 선택할 수 있습니까? 대답은 아니오입니다. 데이터베이스 컨텍스트 만 사용하면 프로그래밍 방식으로 선택할 수 있습니다. (이미 서버 컨텍스트를 외부에서 미리 선택했습니다)

링크 된 서버 및 열기 쿼리는 DDL에 액세스 할 수 있지만 문자열로 캡슐화하려면 코드를 다시 작성해야하므로 개발/디버그가 어렵습니다.

또는 외부 드라이버 프로그램에 의지하여 SQL 파일을 픽업하여 Open Query를 통해 원격 서버로 전송 할 수 있습니다. 그러나 대부분의 경우 DDL을 평가하기 위해 첫 번째 장소에서 서버에 직접 연결했을 수도 있습니다.

다른 서버에서 데이터를 검색하려고 할 때마다 두 단계가 필요합니다.

첫 번째 단계:

-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE'

두번째 단계:

--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)    
SELECT * INTO DESTINATION_TABLE_NAME 
FROM ORACLE.SOURCE_DATABASENAME.DBO.SOURCE_TABLE

여러 서버에 연결하는 경우 서버를 전환하기 전에 'GO'를 추가해야합니다. 그렇지 않으면 SQL 문이 잘못된 서버에 대해 실행됩니다.

예를 들어

:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO

http://www.sqlmatters.com/articles/changing%20the%20SQL%20Server%20Connection%20within%20an%20SM%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

연결된 서버를 작성해보십시오 ( sp_addlinkedserver) 그런 다음 사용합니다 OpenQuery

내 C 드라이브에서 먼저 새 테이블을 만들기 위해 txt 파일을 만듭니다. 이 텍스트 파일에서 원하는 것을 사용할 수 있습니다.

이 경우 텍스트 파일은 "bedrijf.txt"라고합니다.

내용 :

Print 'START(A) create table'

GO 1

If not EXISTS
(
    SELECT *
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'Bedrijf'
)
BEGIN
CREATE TABLE [dbo].[Bedrijf] (
[IDBedrijf] [varchar] (38)   NOT NULL ,
[logo] [varbinary] (max) NULL ,
[VolledigeHandelsnaam] [varchar] (100)  NULL 
) ON [PRIMARY]

저장해

그런 다음 "bedrijf.bat"이라는 이름과 확장자 박쥐의 다른 txt 파일을 만듭니다. 콘텐츠입니다 :

OSQL.EXE  -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName

저장하고 Explorer에서 두 번 클릭하여 실행됩니다

결과는 "bedrijf.out"라는 이름의 C 드라이브의 txt 파일에 저장됩니다.

이것은 보여준다

1> 2> 3> START(A) create table

모든게 잘되면

그게 다야

가능하면 SSIS (SQL Server Integration Services)를 확인하십시오. 나는이 툴킷으로 발을 젖게하고 있지만 이미 40 개 이상의 서버를 반복하고 모든 종류의 혼란을 짜기 위해 준비하고 있습니다.)

PowerShell 유형 : :

$cn = new-object system.data.SqlClient.SQLConnection("Data Source=server1;Initial Catalog=db1;User ID=user1;Password=password1");
$cmd = new-object system.data.sqlclient.sqlcommand("exec Proc1", $cn);
$cn.Open();
$cmd.CommandTimeout = 0
$cmd.ExecuteNonQuery()
$cn.Close();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top