2014-06-05 2 views
0

나는 더 유연하게 작업하고있는 SQL 스크립트를 가지고 있습니다. 한 DB의 테이블에 행을 삽입 한 다음 테이블을 만들고 동일한 서버의 다른 DB에 행을 삽입 할 수 있어야합니다. 나는이 두 가지를 각각 다른 두 개의 스크립트로 할 수 있지만, 어떻게 하나로 처리 할 수 ​​있는지 알아 내려하고있다.하나 이상의 "use db"를 사용할 때 변수를 사용하는 방법

use firmTriad 
create table #TempTable (IssueId nvarchar(300),[SQL] nvarchar(300),FirmID varchar(255),[Table] varchar(255),SecurityDelete varchar(255) 
     ,SecurityKeep varchar(255)) 
declare @IssueID nvarchar(300),@SQL nvarchar(300),@FirmID varchar(255),@SecurityCUSIPdelete varchar(255),@SecurityCUSIPkeep varchar(255) 
set @SecurityCUSIPkeep = 'AET133A20' 
set @SecurityCUSIPdelete = 'AEXVA0559' 
set @FirmID = 'firmTriad' 
set @IssueID = 'RQST00002652426' 
set @IssueID = 'tblSecurity_MSReference_' + @IssueID 
insert into #TempTable (IssueId,FirmID,SecurityDelete,SecurityKeep) 
select @IssueID,@FirmID,@SecurityCUSIPdelete,@SecurityCUSIPkeep 

use PSBackup 
select * from #TempTable 
declare @Table varchar(255), @PSTable varchar(255) 
set @PSTable = 'tblSecurity_MSReference_' + @IssueID 
set @Table = @FirmID + '.dbo.' + left(@Table,len(@Table)-16) 

print (@FirmID) 
set @SQL = 'create table ' + @IssueID + '([RecID],[SecurityID],[MSCUSIP],[LastUpdateDT] 
       ,Issue_Key,Issue_Backup_Date,Issue_Backup_Len)' 
exec @SQL 
insert into sys. (@firmID + '.dbo.tblSecurity_MSReference') --firmTriad.dbo.tblSecurity_MSReference 
select [RecID],[SecurityID],[MSCUSIP],[LastUpdateDT],Issue_Key,Issue_Backup_Date,Issue_Backup_Len 
from @Table 
where [SecurityID] in(select RecID from firmTriad.dbo.tblSecurity where CUSIP in(@SecurityCUSIPdelete,@SecurityCUSIPkeep)) 

나는 두 use db 섹션 사이 이월 변수를 얻는 방법을 알아낼 수 없습니다 : 여기에 내가 무엇을 시도했다의 예입니다.

답변

1

구체화 된 임시 테이블 (#TempTable)을 만든 다음 일부 SELECT 쿼리를 수행 한 다음 새 테이블을 만들고 거기에 일부 데이터를 삽입하는 것을 확인합니다.

제가 알다시피, 귀하의 문제는 데이터베이스 간 변수로 인한 것입니까?

는 이것이 작동하는지, 당신이 알고하는 데 도움이 있습니까 :

create table PSBackup.dbo.TheNameOfYourTable(
    IssueId nvarchar(300), 
    [SQL] nvarchar(300), 
    FirmID varchar(255), 
    [Table] varchar(255), 
    SecurityDelete varchar(255), 
    SecurityKeep varchar(255) 
); 

테이블을 만들거나 기본적으로 해당 데이터베이스에 아무것도하기 위해 "PSBackup를 사용"할 필요가 없습니다. 일반 "공식"이다.

SELECT * FROM <dbname>.<schemaname>.<tablename> 
EXEC <dbname>.<schemaname>.<StoredProcedureName> 

문 "사용 PSBackup는"작업중인 컨텍스트를 변경 테이블을 생성하고 DBNAME과 스키마 명을 제공 해달라고하는 경우, SQL 서버는 기본값을 사용합니다 (마스터 및 dbo). 물론 컨텍스트를 변경하면 변수가 삭제됩니다. transactions의 관점에서 생각하면 하루가 지나면 분명해질 것입니다.

다른 비 관련 사항은 열 이름에 예약 된 이름을 사용하지 않아야한다는 것입니다. 이것은 ... 미래에 모든 종류의 문제를 일으키는 원인이되는 열 이름 변경 시도 할 수 있습니다 :

  • "[SQL]"을 "쿼리"
  • "[표]"을 "TBL"또는 "TABLENAME을"

+0

도움을 주셔서 감사합니다.하지만 여전히 몇 가지 질문이 있습니다. – Mike

관련 문제