【问题标题】:Insert into Identical tables without using dynamic sql在不使用动态 sql 的情况下插入相同的表
【发布时间】: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


    【解决方案1】:

    以您需要使用的方式对动态 SQL 的查询计划进行缓存,请参阅链接 herehere2

    【讨论】:

    • 感谢您的回答,我已经知道使用 sp_executesql 但是您仍然可以获得多个查询计划,因为语句的核心并不总是相同的。我希望还有另一种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2015-11-19
    • 1970-01-01
    • 2015-10-12
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多