Sql 将表名和行信息传递到INSERT into存储过程中
我希望将表名和值传递到过程中,而不提及列名,因为我希望能够在任何表上使用它Sql 将表名和行信息传递到INSERT into存储过程中,sql,sql-server,Sql,Sql Server,我希望将表名和值传递到过程中,而不提及列名,因为我希望能够在任何表上使用它 @row将是类似于“test”和“123”的csv字符串 我的代码导致错误: CREATE PROCEDURE test @table NVARCHAR(100), @row NVARCHAR(MAX) AS BEGIN SET NOCOUNT ON; DECLARE @Sql NVARCHAR(MAX) SET @sql = 'INSERT INTO ' + @table+
@row
将是类似于“test”和“123”的csv字符串
我的代码导致错误:
CREATE PROCEDURE test
@table NVARCHAR(100),
@row NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO ' + @table+ 'VALUES (' + @row + ')'
EXEC sp_executesql @sql
END
请试试这个
SQL
注意:如果选择表名动态
并传递单个值,则表示该表具有单个列
如果您传递了任何其他表,并且该表有多个列,则insert语句不起作用。错误是什么?仅供参考,@table和'value'之间需要空白。。现在,您的SQL将把INSERT读入MYTABLEVALUES……我将尽可能快地退出这种类型的过程。它很容易受到sql注入的攻击,而且非常脆弱。如果没有为表传递正确数量的值,这将导致崩溃。“一个程序来管理所有人”的做法不好的原因有很多。你应该解释为什么你认为这是有效的。为什么它比OP的查询更好?表变量可能很危险。如果您打算使用类似的东西,那么在执行诸如
INSERT
之类的操作之前,需要检查和验证变量。您所做的只是在OP发布的代码中添加一个预定义的模式名。这有什么改进?
CREATE PROCEDURE test
@table NVARCHAR(100),
@row NVARCHAR(max)
AS
BEGIN
DECLARE @Sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO [dbo].[' + @table+ '] VALUES (' + @row + ')'
EXEC sp_executesql @sql
END