gpt4 book ai didi

sql-server - 在 sql server 中使用动态模式名​​称时编写存储过程

转载 作者:行者123 更新时间:2023-12-03 12:50:28 25 4
gpt4 key购买 nike

我目前使用的应用程序的表有不同的模式名称,例如 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.如果性能受到影响,那么这种场景应该怎么写程序呢?

最佳答案

解决此问题的最佳方法是重新设计,如果可能的话。

您甚至可以通过添加一个新列来替换架构来追溯实现这一点,例如:Profile,然后将每个架构中的所有表合并到一个架构中(例如 dbo )。

那么您的程序将如下所示:

create procedure dbo.usp_GetDataFromTable1
@profile int,
@userid bigint
as
begin
select a.EmailID from dbo.Table1 a
where a.ID = @user_id
and a.Profile = @profile
end

我为配置文件列使用了 int,但是如果您使用 varchar,您甚至可以保留配置文件值的架构名称,如果这有助于事情更清楚了。

关于sql-server - 在 sql server 中使用动态模式名​​称时编写存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com