programing

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

lovejava 2023. 7. 8. 10:24

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

한 SQL Server에서 다른 SQL Server로 저장 프로시저(SP)를 복사해야 하는 경우 SSMS에서 SP를 마우스 오른쪽 버튼으로 클릭하고 Script Stored Procedure를 > CREATE to > New Query Editor Window로 선택합니다.그런 다음 해당 창을 마우스 오른쪽 버튼으로 클릭하고 Connection > Change Connection...(연결 변경...)을 선택하여 연결을 변경합니다.그런 다음 새 서버와 F5를 선택하여 새 서버에서 작성을 실행합니다.

그래서 제 질문은 "다른 SQL 서버에 연결하기 위한 T-SQL 구문은 무엇입니까?"입니다. 그러면 이 구문을 생성 스크립트의 맨 위에 붙여넣고 F5를 실행하면 새 서버로 전환하여 생성 스크립트를 실행할 수 있습니다.

질문을 입력하는 동안 저는 제가 하려는 일에 대한 배경을 제공하면 여러분이 이를 달성할 수 있는 더 빠르고 더 나은 방법을 생각해 낼 수 있다는 것을 깨달았습니다.

SQL Server Management Studio의 쿼리 메뉴에서 SQLCMD 모드를 설정합니다.그런 다음 스크립트의 맨 위에 아래 명령을 입력합니다.

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

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

또한 연결된 서버와 관련된 쿼리를 작성할 때 다음과 같은 대괄호를 포함해야 합니다.

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

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

업데이트: 다른 sql 서버에 연결하고 sql 문을 실행하려면 sqlcmd Utility를 사용해야 합니다.이 작업은 일반적으로 배치 파일에서 수행됩니다.관리 스튜디오 내에서 실행하려는 경우 를 xmp_cmdshell과 결합할 수 있습니다.


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

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_addlinked 서버로 할 수 있음)를 만든 다음 OPENQUERY를 사용해 보십시오.

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

이 경우 텍스트 파일의 이름은 "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

저장하고 탐색기에서 실행하려면 두 번 클릭합니다.

결과는 C 드라이브의 텍스트 파일에 "Bedrijf.out"이라는 이름으로 저장됩니다.

그것은 보여줍니다.

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

만사가 순조롭다면

바로 그겁니다.

다음과 같은 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();

가능하면 SSIS(SQL Server Integration Services)를 확인하십시오.저는 이 툴킷에 흠뻑 젖었을 뿐이지만, 이미 40개 이상의 서버를 루프하고 모든 종류의 혼란을 일으킬 준비를 하고 있습니다;)

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