zoukankan      html  css  js  c++  java
  • c#动态创建存储过程中,提示'go' 附近有语法错误解决方案

    1  public int CreateDB_KillProc_proc()
     2         {
     3             int result = 0;
     4             string SqlStr = "";
     5             //组合Sql语句
     6             SqlStr += @"USE [RadarDataBase]
     7                     GO
     8                     SET ANSI_NULLS ON
     9                     GO
    10                     SET QUOTED_IDENTIFIER ON
    11                     GO
    12                     create proc [dbo].[P_KillConnections] 
    13                     @dbname varchar(200) 
    14                     as
    15                     declare @sql nvarchar(500) 
    16                     declare @spid nvarchar(20) 
    17                     declare #tb cursor for 
    18                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname) 
    19                     open #tb 
    20                     fetch next from #tb into @spid 
    21                     while @@fetch_status=0 
    22                     begin
    23                     exec('kill '+@spid) 
    24                     fetch next from #tb into @spid 
    25                     end close #tb deallocate #tb ";
    26                    
    27             //执行Sql语句
    28             try
    29             {
    30                 result = DbHelperSQL.ExecuteSql(SqlStr);
    31             }
    32             catch (Exception e)
    33             {
    34                 ErrStr = e.Message;
    35                 return -2;
    36             }
    37             return result;
    38         }

    但执行过程中出现以下错误

     以下是我在查询分析器中能正常使用的脚本代码。
     

     1 USE [RadarDataBase]
     2                     GO
     3                     SET ANSI_NULLS ON
     4                     GO
     5                     SET QUOTED_IDENTIFIER ON
     6                     GO
     7                     create proc [dbo].[P_KillConnections] 
     8                     @dbname varchar(200
     9                     as
    10                     declare @sql nvarchar(500
    11                     declare @spid nvarchar(20
    12                     declare #tb cursor for 
    13                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname) 
    14                     open #tb 
    15                     fetch next from #tb into @spid 
    16                     while @@fetch_status=0 
    17                     begin
    18                     exec('kill '+@spid) 
    19                     fetch next from #tb into @spid 
    20                     end close #tb deallocate #tb ";


    查询分析器是sql客户端,它可以识别go用来分批提交,但go不是sql语句,sql服务器不能识别所以不能用在程序中。

    所以将带有GO的语句分成多条sql语句,执行多条SQL语句,实现数据库事务,代码如下:

     1  public int CreateDB_KillProc_proc()
     2         {
     3             List<string> strSqls = new List<string>();
     4             int result = 0;
     5             string SqlStr = "";
     6             //组合Sql语句
     7             SqlStr += "USE [RadarDataBase]";
     8             strSqls.Add(SqlStr);
     9             SqlStr = "SET ANSI_NULLS ON ";
    10             strSqls.Add(SqlStr);
    11             SqlStr = "SET QUOTED_IDENTIFIER ON  ";
    12             strSqls.Add(SqlStr);
    13             SqlStr = @"create proc [dbo].[P_KillConnections] 
    14                     @dbname varchar(200) 
    15                     as
    16                     declare @sql nvarchar(500)
    17                     declare @spid nvarchar(20) 
    18                     declare #tb cursor for
    19                     select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    20                     open #tb
    21                     fetch next from #tb into @spid
    22                     while @@fetch_status=0 
    23                     begin
    24                     exec('kill '+@spid)
    25                     fetch next from #tb into @spid 
    26                     end close #tb deallocate #tb";
    27             strSqls.Add(SqlStr);
    28             //执行Sql语句
    29             try
    30             {
    31                 result = DbHelperSQL.ExecuteSqlTran(strSqls);//这个函数功能是执行多条sql语句实现数据库事务
    32             }
    33             catch (Exception e)
    34             {
    35                 ErrStr = e.Message;
    36                 return -2;
    37             }
    38             return result;
    39         }
    40 
  • 相关阅读:
    开始制作国产的 scratch
    七个对我最重要的职业建议(译文)
    不要在功能上竞争
    来看看机智的前端童鞋怎么防盗
    悬疑塑成天才?
    Linux常用命令之重启关机命令
    Linux常用命令之网络命令
    Linux常用命令之文件搜索命令
    Linux常见命令之权限管理命令
    Linux常见命令之文件处理命令
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3570192.html
Copyright © 2011-2022 走看看