这里是我必须在 SQL 表中插入个人资料照片的情况。但这里有两种情况
如果用户从前端插入照片和数据。它工作得很好。
如果用户跳过照片而只是插入他的传记,那么在这种情况下,默认情况下应插入默认图像。我试图在前端做只是在 if else 条件下添加虚拟图像,但是在 DMZ 服务器中由于某种原因这会产生问题,在本地服务器上它运行良好。 这是查询...
ALTER PROCEDURE [dbo].[SavePhysicianBiodata]
-- Add the parameters for the stored procedure here
@ID int,
@Physician_Bio nvarchar(MAX),
@Physician_Mnemonic nvarchar(MAX),
@Physician_Image image,
@Physician_ImageType nvarchar(MAX),
@Physician_ImageFileName nvarchar(MAX)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
if( @ID is null OR @ID='')
begin
--if not image then deafult image will be applied
if((@Physician_ImageType is null or @Physician_ImageType='') and
(@Physician_ImageFileName is null or @Physician_ImageFileName='') )
begin
insert into Physician_Biodata(Physician_Bio, Physician_Mnemonic)
values(@Physician_Bio, @Physician_Mnemonic)
set @ID = SCOPE_IDENTITY()
update [dbo].[Physician_Biodata]
set Physician_Image=@Physician_Image,
Physician_ImageType=@Physician_ImageType,
Physician_ImageFileName=@Physician_ImageFileName
where ID=@ID
end
else
begin
-- Insert statements for procedure here when user adds photo as well
insert into Physician_Biodata(Physician_Bio, Physician_Mnemonic,
Physician_Image, Physician_ImageType, Physician_ImageFileName)
values(@Physician_Bio, @Physician_Mnemonic,
@Physician_Image,@Physician_ImageType,@Physician_ImageFileName)
end
end
else
begin
update [dbo].[Physician_Biodata]
set Physician_Bio=@Physician_Bio,
Physician_Mnemonic=@Physician_Mnemonic,
Physician_Image=@Physician_Image,
Physician_ImageType=@Physician_ImageType,
Physician_ImageFileName=@Physician_ImageFileName
where ID=@ID
end
END
在这个查询中,我还尝试了下面给出的插入查询
insert into Physician_Biodata(ID, Physician_Image, Physician_ImageType, Physician_ImageFileName)
select @ID, dd.Physician_Image,dd.Physician_ImageType,dd.Physician_ImageFileName from DefaultImage as dd
join Physician_Biodata
on Physician_Biodata.Physician_ImageFileName = dd.Physician_ImageFileName
where Physician_Biodata.ID = @ID
但在执行过程中出错
Msg 544, Level 16, State 1, Procedure dbo.SavePhysicianBiodata, Line 35 [Batch Start Line 2]
Cannot insert explicit value for identity column in table 'Physician_Biodata' when IDENTITY_INSERT is set to OFF.
如果有人可以帮助我,那就太好了.. 提前致谢。
答案 0 :(得分:0)
看起来Physician_Biodata 的ID 列是一个IDENTITY,因此您有例外。
改变这个...
INSERT INTO Physician_Biodata (
ID, Physician_Image, Physician_ImageType, Physician_ImageFileName
)
SELECT
@ID,
dd.Physician_Image,
dd.Physician_ImageType,
dd.Physician_ImageFileName
FROM DefaultImage AS dd
JOIN Physician_Biodata
ON Physician_Biodata.Physician_ImageFileName = dd.Physician_ImageFileName
WHERE
Physician_Biodata.ID = @ID;
为此...
INSERT INTO Physician_Biodata (
Physician_Image, Physician_ImageType, Physician_ImageFileName
)
SELECT
dd.Physician_Image,
dd.Physician_ImageType,
dd.Physician_ImageFileName
FROM DefaultImage AS dd
JOIN Physician_Biodata
ON Physician_Biodata.Physician_ImageFileName = dd.Physician_ImageFileName
WHERE
Physician_Biodata.ID = @ID;
会使您的“显式值”异常消失,就像在您尝试将 INSERT
插入 @ID
的 ID
中一样,这是一个标识列。您还在 ID = @ID
子句中使用了 WHERE
,这使得插入 @ID
毫无意义,因为这将是一个先有鸡还是先有蛋的问题。
另一方面,如果 @Physician_ImageType
和 @Physician_ImageFileName
都进入 NULL
,鉴于您现有的 SP 的逻辑,它们在您的 UPDATE 中仍然为 NULL。
我冒昧地整理/简化了您的 T-SQL,并添加了关于我所质疑的内容的注释。
ALTER PROCEDURE [dbo].[SavePhysicianBiodata] (
@ID int,
@Physician_Bio nvarchar(MAX),
@Physician_Mnemonic nvarchar(MAX),
@Physician_Image image,
@Physician_ImageType nvarchar(MAX),
@Physician_ImageFileName nvarchar(MAX)
)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL( @ID, '' ) = ''
BEGIN
--if not image then deafult image will be applied
IF ISNULL( @Physician_ImageType, '' ) = '' AND ISNULL( @Physician_ImageFileName, '' ) = ''
BEGIN
INSERT INTO Physician_Biodata ( Physician_Bio, Physician_Mnemonic )
VALUES ( @Physician_Bio, @Physician_Mnemonic ) ;
SET @ID = SCOPE_IDENTITY();
/*
Where are you setting the values for @Physician_Image, @Physician_ImageType, and @Physician_ImageFileName? These are still NULL?
*/
UPDATE [dbo].[Physician_Biodata]
SET
Physician_Image = @Physician_Image,
Physician_ImageType = @Physician_ImageType,
Physician_ImageFileName = @Physician_ImageFileName
WHERE
ID = @ID;
END
ELSE BEGIN
-- Insert statements for procedure here when user adds photo as well
INSERT INTO Physician_Biodata (
Physician_Bio, Physician_Mnemonic, Physician_Image, Physician_ImageType, Physician_ImageFileName
)
VALUES (
@Physician_Bio, @Physician_Mnemonic, @Physician_Image, @Physician_ImageType, @Physician_ImageFileName
);
END
END
ELSE BEGIN
UPDATE [dbo].[Physician_Biodata]
SET
Physician_Bio = @Physician_Bio,
Physician_Mnemonic = @Physician_Mnemonic,
Physician_Image = @Physician_Image,
Physician_ImageType = @Physician_ImageType,
Physician_ImageFileName = @Physician_ImageFileName
WHERE
ID = @ID;
END
END
答案 1 :(得分:0)
是的,我已经更改了第一个插入语句(删除了 ID)并且 更新了第二个查询
set @ID = IDENT_CURRENT('Physician_Biodata')
update Physician_Biodata
set Physician_Biodata.Physician_Image= DefaultImage.Physician_Image, Physician_Biodata.Physician_ImageType= DefaultImage.Physician_ImageType, Physician_Biodata.Physician_ImageFileName=DefaultImage.Physician_ImageFileName from Physician_Biodata, DefaultImage where Physician_Biodata.ID=@ID
它奏效了