【发布时间】:2017-12-11 22:17:59
【问题描述】:
我使用的是 SQL Server 2012 Enterprise,并且我有一个接受两个参数的存储过程:
@pkgId varchar(16), @siteId varchar(2)
然后存储过程会像这样执行 INSERT:
IF @siteId = '01'
BEGIN
INSERT INTO dbo.table**01** (pkgId)
VALUES (@pkgId)
END
IF @siteId = '02'
BEGIN
INSERT INTO dbo.table**02** (pkgId)
VALUES (@pkgId)
END
IF @siteId = '03'
BEGIN
INSERT INTO dbo.table**03** (pkgId)
VALUES(@pkgId)
END
现在我们希望再添加 10 个网站。所以我必须再添加 10 条 IF 语句,但我不想使用动态 SQL,因为我需要缓存查询计划,因为速度是必须的。另外,我还有很多已经以“01”、“02”和“03”结尾的表,所以我还有很多代码更新要做。
此外,这些表是分开的,这是一项业务要求。意思是,我不能只有一个以 siteId 作为列的表。
所以问题是: 是否有其他方法可以通过使用其他替代方法来执行此INSERT 并将我的编码保持在最低限度?意思是,如果可能的话,我想只调用一次INSERT,而不使用动态 SQL。
仅供参考 - 我见过其他一些替代方法,例如实时设置同义词,但这会导致并发问题。
【问题讨论】:
标签: stored-procedures sql-server-2012