【问题标题】:Create a stored procedure to insert new data into a table创建存储过程以将新数据插入表中
【发布时间】:2013-12-12 13:23:24
【问题描述】:

我想创建一个存储过程以在表 'dbo.Terms' 中插入新行

CREATE PROCEDURE dbo.terms 
       @Term_en                      NVARCHAR(50)  = NULL   , 
       @Createdate                   DATETIME      = NULL   , 
       @Writer                       NVARCHAR(50)  = NULL   , 
       @Term_Subdomain               NVARCHAR(50)  = NULL  
AS 
BEGIN 
     SET NOCOUNT ON 

     INSERT INTO dbo.terms
          (                    
            Term_en                     ,
            Createdate                  ,
            Writer                      ,
            Term_Subdomain                 
          ) 
     VALUES 
          ( 
            @Term_en    = 'Cat'               ,
            @Createdate   = '2013-12-12'      ,
            @Writer         = 'Fadi'          ,
            @Term_Subdomain = 'English'                    
          ) 

END 

GO

但是这里显示一个错误(@Term_en = 'Cat')不正确的语法 有什么帮助吗?

【问题讨论】:

  • 你到底想做什么?

标签: sql sql-server stored-procedures


【解决方案1】:

我假设您想将值 cat 等插入表中;为此,您需要使用过程变量中的值。我不会将您的过程称为与您的表同名的名称,这会让人感到困惑;你可以找到一些关于命名标准的好资源(或来自Adventureworks的婴儿床)

CREATE PROCEDURE dbo.terms 
       @Term_en                      NVARCHAR(50)  = NULL   , 
       @Createdate                   DATETIME      = NULL   , 
       @Writer                       NVARCHAR(50)  = NULL   , 
       @Term_Subdomain               NVARCHAR(50)  = NULL  
AS 
BEGIN 
     SET NOCOUNT ON 

     INSERT INTO dbo.terms
          (                    
            Term_en                     ,
            Createdate                  ,
            Writer                      ,
            Term_Subdomain                 
          ) 
     VALUES 
          ( 
            @Term_en,
            @Createdate,
            @Writer,
            @Term_Subdomain
          ) 

END 

GO

然后进行测试

exec dbo.terms 
    @Term_en    = 'Cat'               ,
    @Createdate   = '2013-12-12'      ,
    @Writer         = 'Fadi'          ,
    @Term_Subdomain = 'English' 

【讨论】:

  • @MartinSmith 我认为这取决于您如何从应用程序中调用您的程序,如果您在调用程序时始终能够传递所有参数,那么您不需要默认值。如果您的代码调用过程并且有时没有为所有变量传递值,则您确实需要 null 的参数,否则过程将期望您将 null 传递给变量。
  • 非常感谢,现在。任何人都可以告诉我如何创建触发器以在表“dbo.terms”中插入任何新行时在另一个表中添加行?
【解决方案2】:

这里是如何在你的 proc 中设置参数的默认值:

CREATE PROCEDURE dbo.terms 
       @Term_en        NVARCHAR(50)  = 'Cat', 
       @Createdate     DATETIME      = '2013-12-12', 
       @Writer         NVARCHAR(50)  = 'Fadi', 
       @Term_Subdomain NVARCHAR(50)  = 'English'
AS 
BEGIN 
     SET NOCOUNT ON 

     INSERT INTO dbo.terms
          (                    
            Term_en                     ,
            Createdate                  ,
            Writer                      ,
            Term_Subdomain                 
          ) 
     VALUES 
          ( 
            @Term_en,
            @Createdate,
            @Writer,
            @Term_Subdomain                    
          ) 

END 

GO

【讨论】:

    【解决方案3】:

    您的代码不正确。 你把价值放在插入部分。您应该在执行部分输入值

    CREATE  PROCEDURE  dbo.terms     
       @Term_en                      NVARCHAR(50)  = NULL   ,    
       @Createdate                   DATETIME      = NULL   ,     
       @Writer                       NVARCHAR(50)  = NULL   ,    
       @Term_Subdomain               NVARCHAR(50)  = NULL
    AS  
    BEGIN  
     SET NOCOUNT ON  
     INSERT INTO dbo.terms  
          (                    
            Term_en,  
            Createdate,  
            Writer,
            Term_Subdomain                 
          )
    
     VALUES 
          ( 
            @Term_en    ,
            @Createdate ,
            @Writer     ,
            @Term_Subdomain                     
          ) 
    
     END 
    

    由此执行

    exec dbo.terms 
    @Term_en    = 'Cat'               ,
    @Createdate   = '2013-12-12'      ,
    @Writer         = 'Fadi'          ,
    @Term_Subdomain = 'English' 
    
    GO
    

    【讨论】:

      【解决方案4】:
      -- =============================================
      -- Author:      xxxx 
      -- Create date: xx-xx-xxxx
      -- Description: Procedure for Inserting Data in table 
      -- =============================================
      
      
      CREATE PROCEDURE [dbo].[SP_Emp_Insert]
      (
      @Empname nvarchar(250)=null,
      @Status int=null,
      @LoginUserId nvarchar(50)=null,
      @Msg nvarchar(MAX)=null OUTPUT
      )
      AS
      BEGIN TRY
      
          INSERT INTO tbl_Employee
          VALUES
          (
          @Empname ,
          @Status,
          GETDATE(),
          GETDATE(),
          @LoginUserId
          )
      
          SET @Msg='Table Detail Saved Successfully.'
      
      END TRY
      BEGIN CATCH
      
          SET @Msg=ERROR_MESSAGE()
      
      END CATCH
      
      GO
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-30
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-18
        • 1970-01-01
        相关资源
        最近更新 更多