【发布时间】:2018-08-31 01:46:14
【问题描述】:
我的数据库中有名为Table_Stories 和Table_Images 的表,它们通过键连接。我使用我创建的存储过程将值插入其中。
CREATE TABLE [dbo].Table_Stories
(
[StoryID] INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
[ID] INT FOREIGN KEY REFERENCES Table_Users(ID),
[StoryText] NVARCHAR(120),
[imgID] INT FOREIGN KEY REFERENCES Table_Images (imgID)
)
代码:
CREATE PROCEDURE UserStory
@ID [INT],
@storyText [NVARCHAR](120),
@img [VARCHAR](MAX)
AS
BEGIN
DECLARE @StoryID INT, @ImageID INT;
INSERT INTO Table_Images ([img]) VALUES (@img)
SET @ImageID = SCOPE_IDENTITY();
INSERT INTO Table_Stories ([ID], [StoryText], [imgID])
VALUES (@ID, @storyText, @ImageID)
SET @StoryID = SCOPE_IDENTITY();
INSERT INTO Table_Stories ([StoryID])
VALUES (@StoryID)
INSERT INTO dbo.imagesInStories (StoryID, imgID)
VALUES (@StoryID, @ImageID);
SELECT *
FROM Table_Stories
WHERE StoryID = @StoryID AND imgID = @ImageID;
END
我跑:
exec UserStory 1, 'I welcom you to my trip', 'Chadmie.jpg'
并得到这个错误:
消息 545,级别 16,状态 1,过程 UserStory,第 14 行 [批处理开始行 291]
当 IDENTITY_INSERT 设置为 ON 或复制用户插入 NOT FOR REPLICATION 标识列时,必须为表“Table_Stories”中的标识列指定显式值。
我不明白这个错误是什么意思以及如何解决它。
附言 我无法在此处插入所有 sql 代码(不像我所做的那样),由于无论我尝试修复问题代码做什么,都会显示红色错误,这让我花费了太多时间。
【问题讨论】:
-
看起来您已将 Table_Stories 的 IDENTITY_INSERT 设置为 ON。您可以通过将此设置为 Off 或在插入语句中包含 Identity 列来解决此问题。当它为 ON 时,您需要在 INSERT 语句中显式指定标识列的值。你可以阅读更多here
-
显示 Table_Stories
create table脚本。我不理解其中的两个连续插入。 -
感谢编辑它的人,我希望我知道如何并且不会在这个美妙的网站上造成麻烦。 @IvanStarostin - 我做到了。
-
@SaravanaKannadasanGandhi - 嗨,我不知道为什么,但是当我手动插入 [Table_Stories] 时,它处于关闭状态,必须先编写此代码:SET IDENTITY_INSERT [dbo].[Table_Stories] ON GO .所以现在我不明白你发给我的页面该怎么做。
-
您需要 SET IDENTITY_INSERT [dbo].[Table_Stories] ON 每当您想为您的身份列 (StoryID) 手动插入一个值时......乐于助人!
标签: sql-server tsql stored-procedures syntax-error