IT Share you

다른 SQL Server에 연결하기위한 T-SQL 구문은 무엇입니까?

shareyou 2020. 12. 13. 11:26
반응형

다른 SQL Server에 연결하기위한 T-SQL 구문은 무엇입니까?


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

제 질문은 "다른 SQL Server에 연결하기위한 T-SQL 구문은 무엇입니까?"입니다. 생성 스크립트 상단에 붙여넣고 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 유틸리티 를 사용해야 합니다. 이것은 일반적으로 배치 파일에서 수행됩니다. Management Studio 내에서 실행하려는 경우 xmp_cmdshell 과 결합 할 수 있습니다 .


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

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

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

연결된 서버와 OPEN QUERY는 DDL에 대한 액세스를 제공 할 수 있지만 문자열로 캡슐화하려면 코드를 약간 다시 작성해야하므로 개발 / 디버그가 어렵습니다.

또는 외부 드라이버 프로그램에 의존하여 OPEN QUERY를 통해 원격 서버로 보낼 SQL 파일을 선택할 수 있습니다. 그러나 대부분의 경우 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%20SSMS%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"라는 이름과 bat 확장자를 가진 다른 txt 파일을 만듭니다. 내용 :

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

save it and from explorer double click to execute

The results will be saved in a txt file on your C drive with the name "Bedrijf.out"

it shows

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

if all goes well

That's it


If possible, check out SSIS (SQL Server Integration Services). I am just getting my feet wet with this toolkit, but already am looping over 40+ servers and preparing to wreak all kinds of havoc ;)


Try PowerShell Type like:

$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();

참고URL : https://stackoverflow.com/questions/125457/what-is-the-t-sql-syntax-to-connect-to-another-sql-server

반응형