Joe*_*sey 5 sql-server insert t-sql identity
我得到了 command set identity_insert table_name on;
,但由于某种原因,它实际上并没有改变属性。我已经使用创建表的帐户完成了它,并且我还创建了一个“管理员”帐户并授予它执行任何操作的权限(据我所知)。
每当我在任一帐户下运行命令时,我都会得到“0 行受影响”的结果,然后我无法运行查询来插入我希望插入的行,并出现以下错误:
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“table_name”中的标识列插入显式值。
此外,我尝试在查询中包含架构名称,例如:
set identity_insert mySchema.table_name on;
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
找不到对象“mySchema.table_name”,因为它不存在或您没有权限。
另外值得注意的是,我的项目看起来像:
localhost\SQLEXPRESS
-Databases
--System Databases
--mySchema
Run Code Online (Sandbox Code Playgroud)
有谁知道这个问题的解决方案?
您正在使用正确的语法:
SET IDENTITY_INSERT dbo.sometable ON;
Run Code Online (Sandbox Code Playgroud)
但是,SQL Server 中的架构与数据库不同。
对象的默认架构dbo
如我的示例中所示。如果您已连接到数据库,则不需要指定数据库名称,但您可以这样:
SET IDENTITY_INSERT DbName.dbo.sometable ON;
Run Code Online (Sandbox Code Playgroud)
似乎没有办法获得当前设置,因为它是session-scoped 而不是 persisted。
如果您在数据库中运行此查询,它将返回其中所有表的完全限定名称:
SELECT
QUOTENAME(DB_NAME())+'.'+
QUOTENAME(OBJECT_SCHEMA_NAME(object_id))+'.'+
QUOTENAME(OBJECT_NAME(object_id)) AS FullTableName
FROM sys.tables;
Run Code Online (Sandbox Code Playgroud)
SET IDENTITY_INSERT ON...
必须在与插入相同的会话中运行。
归档时间: |
|
查看次数: |
7541 次 |
最近记录: |