gpt4 book ai didi

sql - 如何在作为变量传递的表名上设置identity_insert

转载 作者:行者123 更新时间:2023-12-03 03:45:05 27 4
gpt4 key购买 nike

我的数据库名称位于 @strDBName 中。我构建并执行SET IDENTITY_INSERT。没有错误,但后续插入失败。下面的代码说明了这个问题。

  Declare @Query Varchar(MAX)
SET @Query = 'SET IDENTITY_INSERT '+ @strDBName +'..TableName ON'
EXEC(@Query)


INSERT INTO [TableName] ... (MAX) Value from another table and other applicable record.


SET @Query = 'SET IDENTITY_INSERT '+ @strDBName +'..TableName OFF'
EXEC(@Query)

最佳答案

为了支持 Brad 在评论中给出的答案,这里有一个在单个动态查询中执行整个插入序列的 MVCE。根据 Kris 的评论,请确保将数据库名称列入白名单,因为查询容易受到 SqlInjection 的攻击(不幸的是,数据库名称无法通过 sp_executesql 在动态 sql 中参数化)

给定:

CREATE TABLE TableName
(
ID INT IDENTITY(1,1)
);

可以执行单个批处理:

DECLARE @strDBName VARCHAR(100) = 'MyDatabase';
Declare @Query Varchar(MAX)
SET @Query = 'SET IDENTITY_INSERT '+ @strDBName +'..TableName ON; '
SET @Query = @Query + 'INSERT INTO '+ @strDBName
+'..[TableName](ID) SELECT COALESCE(MAX(ID), 0)+1 FROM '+ @strDBName +'..TableName; '
SET @Query = @Query + 'SET IDENTITY_INSERT '+ @strDBName +'..TableName OFF;'
EXEC(@Query)

关于sql - 如何在作为变量传递的表名上设置identity_insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832709/

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