【问题标题】:SQL Server Stored Procedure insert query with given parameters具有给定参数的 SQL Server 存储过程插入查询
【发布时间】:2018-07-09 06:50:16
【问题描述】:

首先,对不起我的英语,

我是存储过程的新手,所以我正在寻求帮助。

我有一个项目需要我为可配置的表名和列名创建一个 SP。我已经设法从 vb/vb.net 传递表名和列名值,现在我被困在 SP 上,下面是我的代码示例。

例子:

frmTblname = table_a
frmClmnName = clm_A1, clm_A2, clm_A3, clm_A4, clm_A5,
toTblName = table_b,
toClmnName = clmn_b1,clmn_b2, clmn_b3, clmn_b4, clmn_b5

来自 vb/vb.net Rslt = ConnectionExec.RunSP(con, "sp_configurable_insert", frmTblname, frmClmnName, toTblName, toClmnName)

如何将其添加到 SQL 插入查询中?

这是我的 SP

CREATE procedure [dbo].[sp_configurable_insert] @fromTable nvarchar(50),@fromColumn nvarchar(4000),@toTable nvarchar(50),@toColumn nvarchar(4000)

我试过了,但似乎没有任何结果。

set @Query1 = 'insert into '+@toTable+'('+quotename(@toColumn)+')   
    select top 20 '+@fromColumn+' 
from '+@fromTable+'

谁能帮帮我,好吗?

谢谢:)

【问题讨论】:

  • 首先,显示你的SP的完整来源,而不仅仅是部分。此外,使用“sp_”前缀命名存储过程是一种不好的做法,因为此前缀通常表明这是本机 MSSQL 系统过程。

标签: sql-server vb.net stored-procedures


【解决方案1】:

要改变的地方:

  • quotename(@toColumn) 将返回不正确的 '[clmn_b1,clmn_b2, clmn_b3, clmn_b4, clmn_b5]'。删除quotename() 或设置@toColumn = '[clmn_b1], [clmn_b2], [clmn_b3], [clmn_b4], [clmn_b5]'

  • 您的查询语句未完成。

存储过程(语法正确):

CREATE procedure [dbo].[sp_configurable_insert] 
    @fromTable nvarchar(50),
    @fromColumn nvarchar(4000),
    @toTable nvarchar(50),
    @toColumn nvarchar(4000)
AS
BEGIN
    DECLARE 
        @stm nvarchar(max),
        @err int

    SET @stm = 
        N'insert into '+@toTable+' ('+@toColumn+') select top 20 '+@fromColumn+' from '+@fromTable
    EXEC @err = sp_executesql @stm
    IF @err <> 0 BEGIN
        RETURN @err
    END

    RETURN 0
END

【讨论】:

    【解决方案2】:

    您需要将 EXECUTE(@Query1) 添加到您的 SP,它会起作用

    【讨论】:

      【解决方案3】:

      在查询末尾添加:

      exec sp_executesql @Query1 
      

      所以它应该是这样的:

      set @Query1 = 'insert into '+@toTable+'('+quotename(@toColumn)+')   
          select top 20 '+@fromColumn+' 
      from '+@fromTable+'
      
      exec sp_executesql @Query1
      

      因此请注意@Query1 不完整或包含错误,因为引号不平衡。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        • 2023-03-31
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多