首先,对不起我的英语,
我是存储过程的新手,所以我正在寻求帮助。
我有一个项目,需要我为可配置的表名和列名创建一个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+'
请问有人可以帮我吗?
谢谢:)
答案 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