SQL Server存储过程具有给定参数的插入查询

时间:2018-07-09 06:50:17

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

首先,对不起我的英语,

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

我有一个项目,需要我为可配置的表名和列名创建一个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+'

请问有人可以帮我吗?

谢谢:)

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在查询末尾添加:

exec sp_executesql @Query1 

因此它应该看起来像:

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

exec sp_executesql @Query1

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

答案 2 :(得分:0)

要更改的内容:

  • 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