Sql server 如果记录为空,则插入到一个表中

Sql server 如果记录为空,则插入到一个表中,sql-server,Sql Server,您好,我的存储过程有问题,我想插入到三个表中,我创建了一个存储过程来实现这一点,但我有两个表,分别称为wishlist和general。如果DateAcquired行为空,我想插入到wishlist表中,但是我创建的脚本插入到表中。不管怎样,是否有人可以改进我的脚本,以便在我的常规表中的DateAcquired行不为空时,它不会插入到我的wishlist表中 USE [MediaPlayer] GO /****** Object: StoredProcedure [dbo].[CreateBo

您好,我的存储过程有问题,我想插入到三个表中,我创建了一个存储过程来实现这一点,但我有两个表,分别称为wishlist和general。如果DateAcquired行为空,我想插入到wishlist表中,但是我创建的脚本插入到表中。不管怎样,是否有人可以改进我的脚本,以便在我的常规表中的DateAcquired行不为空时,它不会插入到我的wishlist表中

USE [MediaPlayer]
GO
/****** Object:  StoredProcedure [dbo].[CreateBooks]    Script Date: 12/03/2013 19:05:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[CreateBooks]

    -- Add the parameters for the stored procedure here
    @Name nvarchar (250),
    @FileName nvarchar (250),
    @FilePath  nvarchar (50),
    @FileSize float,
    @DateAdded date,
    @MediaLength nvarchar (50),
    @MediaSubType nvarchar(50),
    @MediaType nvarchar(50),
    @Thumbnail image,
    @DateAquired nvarchar(50),
    @BooksName nvarchar (50),
    @Publisher nvarchar(50),
    @Author nvarchar(50),
    @YearOfPublication date, 
    @Genre nvarchar(50),
    @ISBN nvarchar (50),
    @Synoposis nvarchar(50),
    @SeriesTitle nvarchar(50),
    @SeriesNumber nvarchar(50),
    @GeneralID int output,

    @BookID int output,
    @WishListID int output

AS
BEGIN
Insert into dbo.General
(Name, FileName, FilePath, FileSize, DateAdded, MediaLength,
MediaSubType, MediaType, Thumbnail, DateAquired)
values (@Name, @FileName, @FilePath, @FileSize, @DateAdded, @MediaLength, 
@MediaSubType, @MediaType, @Thumbnail, @DateAquired)

SET @GeneralID = @@IDENTITY     
insert into dbo.Book

(GeneralID, BooksName, Publisher, Author, [Year of publication], Genre,
 ISBN, Synoposis,[Series Title],[Series Number])
Values (IDENT_CURRENT('dbo.General'), @BooksName, @Publisher, @Author, @YearOfPublication, @Genre, 
@ISBN, @Synoposis, @SeriesTitle, @SeriesNumber)

SET @BookID = @@IDENTITY
 Select GeneralID, Name, FileName, FilePath,FileSize,DateAdded,MediaLength,MediaSubType,MediaType,   Thumbnail,DateAquired As Wishlist 
   From General where NULLIF(DateAquired,'')IS Null 
   Select * from WishLists
  select GeneralID, MediaSubType, Name
  From General where NOT EXISTS (Select Name from WishLists Where Name =@Name);
  insert into Wishlists (generalID ,MediaType, Name)
  values ((IDENT_CURRENT('dbo.General')),@MediaSubType, @Name)
  SET @WishListID = @@IDENTITY
  select * from wishlists

END

我可能错了,但对我来说,你似乎遗漏了一些逻辑案例

您的代码:

Select GeneralID, Name, FileName, FilePath, FileSize, DateAdded,
MediaLength,MediaSubType,MediaType, Thumbnail, DateAquired As Wishlist 
From General where NULLIF(DateAquired,'')IS Null 
这样做的目的是从General中选择DateAcquired为Null的命名字段。另一方面,我认为(我可能错了),如果您希望所有这些字段都作为愿望列表,那么应该将它们全部放在括号中,如:

Select (GeneralID, Name, FileName, FilePath, FileSize, DateAdded,
MediaLength,MediaSubType,MediaType, Thumbnail, DateAquired) As Wishlist 
From General where NULLIF(DateAquired,'')IS Null 
不管怎样,一旦你有了这些数据,你就不会对它做任何事情,你将进入一个新的选择查询,从愿望列表中选择*。然后再次从“常规”中进行选择,该名称不在表中。然后将当前标识值dbo.General、@MediaSUbType、@Name插入到愿望列表中

因此,这段代码真正要做的就是运行一些查询,然后不管这些结果如何,都将dbo.General的标识值以及状态值@MediaSubType和@Name插入表wishlist。为了让您之前运行的所有查询对插入的内容产生影响,您需要使用用例

我对这些表和东西了解不够,无法编写出您需要的代码,但应该让您了解如何使用用例来完成您需要的工作


希望这对我有所帮助,而不仅仅是无用的闲话

如果您只是试图跳过基于
@DateAquired
为空的愿望列表插入,您可以如下修改脚本。如果这不是你想要的,请回复

BEGIN

    Insert into dbo.General(Name, FileName, FilePath, FileSize, DateAdded, MediaLength, MediaSubType, MediaType, Thumbnail, DateAquired)
        values (@Name, @FileName, @FilePath, @FileSize, @DateAdded, @MediaLength, @MediaSubType, @MediaType, @Thumbnail, @DateAquired);

    SET @GeneralID = scope_identity(); --use this instead of @@IDENTITY

    insert into dbo.Book(GeneralID, BooksName, Publisher, Author, [Year of publication], Genre, ISBN, Synoposis,[Series Title],[Series Number])
        Values (@GeneralID, @BooksName, @Publisher, @Author, @YearOfPublication, @Genre, @ISBN, @Synoposis, @SeriesTitle, @SeriesNumber)

    SET @BookID = scope_identity(); --use this instead of @@IDENTITY


    -- you already have the DateAquired from the insert into dbo.General above, so just use the param @DateAquired
    if(@DateAquired is null)
    begin

        insert into Wishlists (generalID, MediaType, Name)
        values (@GeneralId, @MediaSubType, @Name)

        SET @WishListID = scope_identity(); --use this instead of @@IDENTITY
    end


    select [InsertedGeneralId] = @GeneralID, [InsertedBookID] = @BookID, [InsertedWishListID] = @WishListID

END
AS
开始
插入到dbo.General中
(名称、文件名、文件路径、文件大小、添加日期、MediaLength、,
MediaSubType、MediaType、缩略图、日期获取)
值(@Name、@FileName、@FilePath、@FileSize、@DateAdded、@MediaLength、,
@MediaSubType、@MediaType、@缩略图、@DateAquired)

SET@GeneralID=SCOPE_IDENTITY()--嗨,Nathan,不管dateaquired是否为null,都不会在wishlist表中插入任何内容,请发布更多代码,以便我们可以看到完整的图片。一定还有别的事。给我们提供表结构和示例存储过程输入。我了解您所说的内容,我是sql新手,我仍在学习,没有什么可以帮助我的指针,谢谢
AS
BEGIN
        Insert into dbo.General
        (Name, FileName, FilePath, FileSize, DateAdded, MediaLength,
        MediaSubType, MediaType, Thumbnail, DateAquired)
        values (@Name, @FileName, @FilePath, @FileSize, @DateAdded, @MediaLength, 
        @MediaSubType, @MediaType, @Thumbnail, @DateAquired)

        SET @GeneralID = SCOPE_IDENTITY()  --<-- 

        insert into dbo.Book

        (GeneralID, BooksName, Publisher, Author, [Year of publication], Genre,
         ISBN, Synoposis,[Series Title],[Series Number])
        Values (IDENT_CURRENT('dbo.General'), @BooksName, @Publisher, @Author,
         @YearOfPublication, @Genre, @ISBN, @Synoposis, @SeriesTitle, @SeriesNumber)

        SET @BookID = SCOPE_IDENTITY()
         Select GeneralID, Name, FileName, FilePath,FileSize,DateAdded,MediaLength
                 ,MediaSubType,MediaType,   Thumbnail,DateAquired As Wishlist 
           From General where NULLIF(DateAquired,'')IS Null 
           Select * from WishLists

          select GeneralID, MediaSubType, Name
          From General where NOT EXISTS (Select Name from WishLists Where Name =@Name);

        IF (@DateAquired IS NULL)
        BEGIN
          insert into Wishlists (generalID ,MediaType, Name)
          values ((IDENT_CURRENT('dbo.General')),@MediaSubType, @Name)
          SET @WishListID = SCOPE_IDENTITY()
        END 

          select * from wishlists

END