简体   繁体   English

在链接服务器上的SQL Server存储过程中使用动态服务器和数据库名称

[英]Using dynamic Server and Database Name in SQL Server stored procedure over linked servers

I have a requirement. 我有一个要求。 Using SSIS i am import data from flat file/excel file into my staging table. 我使用SSIS将数据从平面文件/ excel文件导入到我的登台表中。 From staging table i need to filter data and transfer it to different databases over different linked server.ie let say for California i have dbCalifornia on Server A, For Taxes i have dbTaxes on Server B etc etc. I need to read config table and redirect data accordingly.ie if column value =CALI insert data in dbCalifornia.tblA, for column value =TAX insert data in dbTaxes.tblA. 从暂存表中,我需要过滤数据并通过不同的链接服务器将其传输到不同的数据库。例如,对于加利福尼亚,我在服务器A上具有dbCalifornia,对于税收,我在服务器B上具有dbTaxes等。我需要读取配置表并重定向相应地数据。即,如果列值= CALI,则在dbCalifornia.tblA中插入数据,对于列值= TAX,则将数据插入dbTaxes.tblA中。 I am trying to use Server Name and Database name as variable (because i am reading these from config table) ie 我正在尝试使用服务器名称和数据库名称作为变量(因为我正在从配置表中读取它们),即

INSERT INTO [@server].[@database].[DBO].[BASIC]

But i am getting error . 但是我出错了。 I am not expert DBA please suggest my solution how can i implement this scenario. 我不是DBA专家,请提出我的解决方案,该如何实现此方案。

TIA TIA

You can do it using dynamic sql like this: 您可以使用动态sql来做到这一点:

declare @server varchar(100), @database varchar(100);

DECLARE @sql varchar(8000) ='INSERT INTO[' + @server +'].['+ @database + '.[DBO].[BASIC]' + 
'(EmpID,EmployeeID,ADDR1, ADDR2, ADDR3,ADDR4,TELNUM,MARRIED,LNAME,MNAME,FNAME,' + 
'SEX, EMAIL,COUNTRYCODE, CITIZEN) ' + 
'select EmpID,EmployeeID,ADDR1, ADDR2, ADDR3,ADDR4,TELNUM,MARRIED,LNAME,MNAME,FNAME,
SEX, EMAIL,COUNTRYCODE, CITIZEN from dbo.myExcelTable where state = ' + @database;

exec(@sql); 

I don't understand what are your 100 variables tht you use in your insert, didn't you say 我不明白您在插入内容中使用的100个变量是什么,不是说

if column value =CALI insert data in dbCalifornia.tblA, for column value =TAX insert data in dbTaxes.tblA. 如果列值= CALI,则将数据插入dbCalifornia.tblA,如果列值= TAX,则将数据插入dbTaxes.tblA。 ?

So you just need to filter your table using @database value and insert those rows in corresponding table 因此,您只需要使用@database值过滤表并将这些行插入相应的表中

normally when reading a table from another server and DB. 通常是从另一个服务器和数据库读取表时。 I use the LinkedServer, user and table like this: 我这样使用LinkedServer,用户和表:

Select * from Link..User.Table ; 从Link..User.Table中选择*;

after a linked server I have to use 2 dots. 链接服务器后,我必须使用2个点。

I don't know if this can help since this is to read from an Oracle database. 我不知道这是否有帮助,因为这是从Oracle数据库读取的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 链接服务器的过程SQL Server - Procedure for linked servers SQL Server 使用SQL Server中的存储过程检查数据库中是否存在用户名 - Checking if user name exists in database using a stored procedure in SQL Server XML 作为存储过程在使用链接服务器的不同服务器上的输出 - XML as ouput of stored procedure over different servers using linked servers Microsoft SQL Server:使用存储过程将表从链接服务器复制到当前数据库 - Microsoft SQL server: copy table from linked server to current database using a stored procedure SQL 使用 sp_HelpText 查看链接服务器上的存储过程 - SQL using sp_HelpText to view a stored procedure on a linked server 在链接服务器上运行存储过程(链接服务器名称作为变量) - Run stored procedure on linked server (linked server name as variable) 在链接服务器上运行存储过程(链接服务器名称作为参数) - Run stored procedure on linked server (linked server name as Parameter) SQL Server:如何在存储过程中设置动态列名 - SQL Server: how to set dynamic column name in stored procedure 使用表名作为输入参数的动态SQL Server存储过程 - Dynamic SQL Server stored procedure with table name as input param 调用更新SQL链接服务器中的存储过程? - Call update Stored procedure in SQL Linked server?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM