2014-06-05 1 views
0

У меня есть SQL-скрипт, над которым я работал, чтобы сделать более гибким. Мне нужно, чтобы он мог вставлять строки в таблицы в один БД, затем создавать таблицу и вставлять строки в другой БД на том же сервере. Конечно, я могу каждый из этих вещей в двух разных сценариях, но я пытаюсь понять, как это сделать в одном. Вот пример того, что я пробовал:Как использовать переменные при использовании более одного «использования 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> 

заявление «USE PSBackup» изменяет контекст, в котором вы работаете, если вы создаете таблицу И не обеспечиваете DBName и SchemaName, сервер SQL использует только значения по умолчанию (которые являются мастером и dbo). И, конечно, если вы измените контекст, переменные будут отброшены. Подумайте в терминах transactions, и это станет ясно как день.

Другая, не связанная с этим вещь, вы действительно не должны использовать зарезервированные имена для имен столбцов. Это может привести к разного рода проблем в будущем ... Попробуйте изменить имена столбцов:

  • «[SQL]» в «Запрос»
  • «[Таблица]» в «Тампе» или «TableName»

Помогло ли это?

+0

Спасибо за помощь, все еще есть несколько вопросов. – Mike

 Смежные вопросы

  • Нет связанных вопросов^_^