我有一个SQL脚本,我一直致力于提高灵活性。我需要它能够在一个DB中的表中插入行,然后创建一个表并在同一服务器上的另一个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
部分之间延续。
答案 0 :(得分: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>
陈述&#34;使用PSBackup&#34;更改您正在使用的上下文。如果要创建表并且不提供dbname和schemaname,则SQL Server只使用默认值(master和dbo)。当然,如果更改上下文,则会丢弃变量。从transactions的角度思考,它将在白天变得清晰。
另一个不相关的事情是,你真的不应该为列名使用保留名称。这可能会在将来引发各种问题...尝试更改列名称:
这有帮助吗?