【发布时间】:2019-08-19 11:19:22
【问题描述】:
我目前使用的应用程序的表具有不同的模式名称,例如 Table1 可以有多个存在,例如 A.Table1 和 B.Table1。我所有的存储过程都存储在 dbo 下。我正在使用动态 SQL 编写以下存储过程。我目前使用的是 SQL Server 2008 R2,很快就会迁移到 SQL Server 2012。
create procedure dbo.usp_GetDataFromTable1
@schemaname varchar(100),
@userid bigint
as
begin
declare @sql nvarchar(4000)
set @sql='select a.EmailID from '+@schemaname+'.Table1 a where a.ID=@user_id';
exec sp_executesql @sql, N'@user_id bigint', @user_id=@userid
end
现在我的问题是, 1. 这种方法会影响我的存储过程的性能吗? 2. 如果性能受到影响,那么这种场景如何编写程序?
【问题讨论】:
-
也许您没有参与设计,但这听起来像是 2 个数据库的绝佳方案。就个人而言,我认为这是一个糟糕的想法。当您需要连接两个表时会发生什么?索引和所有优化技巧都消失了。
-
@Jeremy 是的,你是对的。我不参与设计。
标签: sql-server stored-procedures