Max*_*sky 5 c# linq sql-server asp.net-mvc linq-to-sql
我正在开发一些所有需要数据库功能的ASP.NET MVC项目.不幸的是,我的托管服务提供商只给我两个SQL Server数据库,所以我想把多个项目的表放在一个数据库中.
但是,我的一些表名称相似,所以我可能遇到一些问题.因此,我试图找到一种方法来更改所有表的名称,以便它们反映它们所属的应用程序.
目前,我在项目A中有以下表格:
Table1
Table2
在项目B中,我有这些表格:
Table1
Table2
我想将表合并到一个数据库中:
ATable1
ATable2
BTable1
BTable2
Table1
从我的代码映射到ATable1
或BTable1
(取决于它是什么应用程序)?Chr*_*ter 10
将表放在单独的模式中,例如
create schema ProjectA;
create schema ProjectB;
create table ProjectA.Table1 (...);
create table ProjectA.Table2 (...);
create table ProjectB.Table1 (...);
create table ProjectB.Table2 (...);
Run Code Online (Sandbox Code Playgroud)
我自己没有对此进行测试,但如果LINQ to SQL(以及任何其他ORM)没有存储并正确使用模式名称,我会感到非常惊讶.
如果手动编写自己的SQL命令,请注意必须在所有对象上引用模式名称,除非它是当前数据库用户的默认模式.如果(a)您只分配了一个SQL Server登录名,并且(b)您有大量现有SQL,则可能会导致问题.
将现有表移动到新模式中,例如将表dbo
转换为ProjectA
:
alter schema ProjectA transfer dbo.Table1;
alter schema ProjectA transfer dbo.Table2;
Run Code Online (Sandbox Code Playgroud)
要进行自动重命名,您可以编写一个简单的循环:
declare objectsCursor cursor local fast_forward for
select o.name as objectname, s.name as schemaname
from sys.objects as o
inner join sys.schemas as s on o.schema_id = s.schema_id
-- Alter these filters depending on what you want to convert
where s.name = 'dbo'
and o.type = 'U'
declare @objectname sysname, @schemaname sysname, @sql nvarchar(max)
open objectsCursor
fetch next from objectsCursor into @objectname, @schemaname
while @@fetch_status = 0 begin
select @sql = N'alter schema ProjectA transfer ' + quotename(@schemaname) + '.' + quotename(@objectname)
execute (@sql)
fetch next from objectsCursor into @objectname, @schemaname
end
close objectsCursor
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1088 次 |
最近记录: |