Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 如何通过sql中的多个列名更新sql中的值_Sql Server 2008 - Fatal编程技术网

Sql server 2008 如何通过sql中的多个列名更新sql中的值

Sql server 2008 如何通过sql中的多个列名更新sql中的值,sql-server-2008,Sql Server 2008,我希望向多个列添加值 ALTER PROCEDURE DynamicInsertQuery @ColumnName VARCHAR(MAX), @RiD VARCHAR(50) AS BEGIN DECLARE @DynamicQuery NVARCHAR(MAX) SET @DynamicQuery = 'UPDATE tbl_route_info SET ('+ @ColumnName +') = (1) WHERE RouteId=('+@RiD+')'

我希望向多个列添加值

ALTER PROCEDURE DynamicInsertQuery 
    @ColumnName VARCHAR(MAX),
    @RiD VARCHAR(50)
AS
BEGIN
    DECLARE @DynamicQuery NVARCHAR(MAX)
    SET @DynamicQuery = 'UPDATE tbl_route_info SET ('+ @ColumnName +') = (1) WHERE RouteId=('+@RiD+')'

    EXEC(@DynamicQuery)
END
这是我试过的代码

我像这样运行这个过程

DynamicInsertQuery '(1,2)','10'

我怀疑你想要这样的东西:

ALTER PROCEDURE DynamicInsertQuery (
     @ColumnName VARCHAR(MAX),
     @RiD VARCHAR(50)
) AS
BEGIN
    DECLARE @DynamicQuery NVARCHAR(MAX);
    SET @DynamicQuery = 'update tbl_route_into set @ColumnName = 1 where RouteId = @RiD';
    SET @DynamicQuery = REPLACE(@DynamicQuery, '@ColumnName', @ColumnName);

    EXEC sp_executesql @DynamicQuery, N'@RiD VARCHAR(50)', @RiD = @RiD;
END;
注:

  • 您的版本中括号太多
  • 如果您正在学习使用动态SQL,请学习
    sp_executesql
    ——以及如何使用它传递参数
  • 不能将事物(列、表等)的名称作为参数传递,因此必须将其直接放入字符串中
  • 您可以将值传递到字符串中,例如
    @RiD

我怀疑你想要这样的东西:

ALTER PROCEDURE DynamicInsertQuery (
     @ColumnName VARCHAR(MAX),
     @RiD VARCHAR(50)
) AS
BEGIN
    DECLARE @DynamicQuery NVARCHAR(MAX);
    SET @DynamicQuery = 'update tbl_route_into set @ColumnName = 1 where RouteId = @RiD';
    SET @DynamicQuery = REPLACE(@DynamicQuery, '@ColumnName', @ColumnName);

    EXEC sp_executesql @DynamicQuery, N'@RiD VARCHAR(50)', @RiD = @RiD;
END;
注:

  • 您的版本中括号太多
  • 如果您正在学习使用动态SQL,请学习
    sp_executesql
    ——以及如何使用它传递参数
  • 不能将事物(列、表等)的名称作为参数传递,因此必须将其直接放入字符串中
  • 您可以将值传递到字符串中,例如
    @RiD

谢谢。但我想要多个列名,如belowsp_execSql(1,2,3),“20”这里的1,2,3是列名,表示1是列名,2是列名,3是列名谢谢。但我想要多个列名,如belowsp_execSql(1,2,3),“20”这里1,2,3是列名,表示1是列名2是列名3是列名您需要一个拆分函数来提取列名。这也越来越接近SQL注入,请小心。您将需要一个拆分函数来提取列名。这也接近SQL注入,请小心。