Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将表名和行信息传递到INSERT into存储过程中_Sql_Sql Server - Fatal编程技术网

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