我又有一个c#中sql语句转换成存储过程出现了问题。希望帮忙解决。请帮我看看对否??仍然是当ChoiceResult 为1,2,3时候,分别生成3条记录。
表news的字段如下:
UserID  int
Title  nchar
Subtitle   nchar
Content nchar
Author nchar
Flag  char
NDate  datetime
Delflag  char
Topflag  char
NewskindID  int
请帮我看看存储过程对吗?
CREATE PROCEDURE AddNews
@ChoiceResult varchar(100),
@Title varchar(200),
@Subtitle varchar(300),
@Content varchar(400),
@UserIDD int,
@Author varchar(100),
@Flag char,
@NDate datetime
as
begin
declare @sql nvarchar(1000)
set @sql=N' insert into News select '+cast(@UserIDD as nvarchar)+N'  UserID,Title,Subtitle,Content,Author,Flag,NDate,NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')'
--print @sql
exec(@sql)
end
GO
报错说
插入错误: 列名或所提供值的数目与表定义不匹配。列名 'Title' 无效。列名 'Subtitle' 无效。列名 'Content' 无效。列名 'Author' 无效。列名 'Flag' 无效。列名 'NDate' 无效。

解决方案 »

  1.   

    Kindnews表中有上述的那些列么
      

  2.   

    kindnews表里只有3列。NewskindID  NodeCode text
    我不太会写存储过程。所以希望帮忙!555
      

  3.   

    set @sql=' insert into News select '+
    cast(@UserIDD as nvarchar) + '  UserID,''' +
    @Title + ''' Title,' + 
    @Subtitle +''' Subtitle,''' +
    @Content + ''' Content, '''+
    @Author + ''' Author,''' +
    @Flag + ''' Flag,''' +
    cast(@NDate as nvarchar) +''' NDate,'+
    ' NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')'
      

  4.   

    更正:
    set @sql=' insert into News select '+
    cast(@UserIDD as nvarchar) + '  UserID,''' +
    @Title + ''' Title,''' + 
    @Subtitle +''' Subtitle,''' +
    @Content + ''' Content, '''+
    @Author + ''' Author,''' +
    @Flag + ''' Flag,''' +
    cast(@NDate as nvarchar) +''' NDate,'+
    ' NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')'
      

  5.   

    如果@sql能是下面这样就对了:
    insert into News 
    select 2  UserID,
    'a' Title,
    'd' Subtitle,
    'c:\aa\' Content,
     'dddd' Author,
    '0' Flag,
    '05  7 2005 12:00AM' NDate, 
    NewskindID from Kindnews 
    where NewskindID in  (1,2) 
      

  6.   

     insert into News select 2  UserID,'a' Title,'b' Subtitle,'a:\aa' Content, 'aaa' Author,'0' Flag,'08  6 2005 12:00AM' NDate, NewskindID from Kindnews where NewskindID in  (1,2)
    @RETURN_VALUE = 0
      

  7.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[News]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[News]
    GOCREATE TABLE [dbo].[News] (
    [NewsID] [int] IDENTITY (1, 1) NOT NULL ,
    [UserID] [int] NULL ,
    [Title] [nchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [Subtitle] [nchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
    [Content] [nchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
    [Author] [nchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [Flag] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [NDate] [datetime] NULL ,
    [Delflag] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [Topflag] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [NewskindID] [int] NULL 
    ) ON [PRIMARY]
    GO
      

  8.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Kindnews]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Kindnews]
    GOCREATE TABLE [dbo].[Kindnews] (
    [NewskindID] [int] IDENTITY (1, 1) NOT NULL ,
    [NodeCode] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Text] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
      

  9.   

    把Author改成varchar(100) 
    几个flag为什么不用smallint或者tinyint?
      

  10.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[News]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[News]
    GOCREATE TABLE [dbo].[News] (
    [NewsID] [int] IDENTITY (1, 1) NOT NULL ,
    [UserID] [int] NULL ,
    [Title] [nchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [Subtitle] [nchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
    [Content] [nchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
    [Author] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [Flag] [tinyint] NULL ,
    [NDate] [datetime] NULL ,
    [Delflag] [tinyint] NULL ,
    [Topflag] [tinyint] NULL ,
    [NewskindID] [int] NULL 
    ) ON [PRIMARY]
    GO
      

  11.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[News]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[News]
    GOCREATE TABLE [dbo].[News] (
    [NewsID] [int] IDENTITY (1, 1) NOT NULL ,
    [UserID] [int] NULL ,
    [Title] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [Subtitle] [varchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
    [Content] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Author] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [Flag] [tinyint] NULL ,
    [NDate] [datetime] NULL ,
    [Delflag] [tinyint] NULL ,
    [Topflag] [tinyint] NULL ,
    [NewskindID] [int] NULL 
    ) ON [PRIMARY]
    GO
      

  12.   

    将 nvarchar 值 ' insert into News select 0 UserID,'a' Title,'asd' Subtitle,'/longliangwang.web/allnews/2005-07/d20d5507-00ed-4d5c-9b55-8efecd6acbf4.htm' Content, 'amy0451' Author,'' 转换为数据类型为 tinyint 的列时发生语法错误。
      

  13.   

    CREATE PROCEDURE AddNews
    @ChoiceResult varchar(100),
    @Title varchar(200),
    @Subtitle varchar(300),
    @Content varchar(400),
    @UserIDD int,
    @Author varchar(100),
    @NDate datetime
    as
    begin
    declare @sql nvarchar(1000)
    set @sql=' insert into News select '+
    cast(@UserIDD as nvarchar) + '  UserID,''' +
    @Title + ''' Title,''' + 
    @Subtitle +''' Subtitle,''' +
    @Content + ''' Content, '''+
    @Author + ''' Author,''' +
    cast(@NDate as nvarchar) +''' NDate,'+
    ' NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')'
    exec(@sql)
    end
    GO
      

  14.   

    你把Delflag设置为非空 
     默认是0  
    Topflag也是 
      

  15.   

    --drop PROCEDURE AddNews
    CREATE PROCEDURE AddNews
    @ChoiceResult varchar(100),
    @Title varchar(200),
    @Subtitle varchar(300),
    @Content varchar(400),
    @UserIDD int,
    @Author varchar(100),
    @Flag tinyint,
    @NDate datetime
    as
    begin
    declare @sql  varchar(1000)
    set @sql=' insert into News select '+
    str(@UserIDD) + '  UserID,''' +
    @Title + ''' Title,''' + 
    @Subtitle +''' Subtitle,''' +
    @Content + ''' Content, '''+
    @Author + ''' Author, ' +
    str(@Flag) + ' Flag,''' +
    cast(@NDate as nvarchar) +''' NDate,'+
    '0 Delflag, 0 Topflag,'+
    ' NewskindID NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')' print @sql
    --exec(@sql)
    end
    GO
    --测试exec AddNews '1,2','标题','子标题','内容',3242,'作者',1,'2005-7-7'--结果
      

  16.   

    --drop PROCEDURE AddNews
    CREATE PROCEDURE AddNews
    @ChoiceResult varchar(100),
    @Title varchar(200),
    @Subtitle varchar(300),
    @Content varchar(400),
    @UserIDD int,
    @Author varchar(100),
    @Flag tinyint,
    @NDate datetime
    as
    begin
    declare @sql  varchar(1000)
    set @sql=' insert into News select '+
    str(@UserIDD) + '  UserID,''' +
    @Title + ''' Title,''' + 
    @Subtitle +''' Subtitle,''' +
    @Content + ''' Content, '''+
    @Author + ''' Author, ' +
    str(@Flag) + ' Flag,''' +
    cast(@NDate as nvarchar) +''' NDate,'+
    '0 Delflag, 0 Topflag,'+
    ' NewskindID NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')' print @sql
    --exec(@sql)
    end
    GO
    --测试exec AddNews '1,2','标题','子标题','内容',3242,'作者',1,'2005-7-7'--结果
      

  17.   

    在查询分析器里面点右键出来insert语句,参考那个语句修改,次序不能颠倒。
      

  18.   

    public static void AddNews(string ChoiceResult,string Title,string Subtitle,string Content,int UserID,string Author,int flag,DateTime NDate)
    {
    string sql="exec AddNews '{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}'";
    sql=string.Format(sql,ChoiceResult,Title,Subtitle,Content,UserID,Author,flag,NDate);
    SqlHelper.ExecuteNonQuery(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql);
    }
      

  19.   

    --drop PROCEDURE AddNews
    CREATE PROCEDURE AddNews
    @ChoiceResult varchar(100),
    @Title varchar(200),
    @Subtitle varchar(300),
    @Content varchar(400),
    @UserIDD int,
    @Author varchar(100),
    @Flag tinyint,
    @NDate datetime
    as
    begin
    declare @sql  varchar(1000)
    set @sql=' insert into News select '+
    str(@UserIDD) + '  UserID,N''' +
    @Title + N''' Title,N''' + 
    @Subtitle +N''' Subtitle,N''' +
    @Content + N''' Content, N'''+
    @Author + N''' Author, ' +
    str(@Flag) + ' Flag,N''' +
    cast(@NDate as nvarchar) +N''' NDate,'+
    '0 Delflag, 0 Topflag,'+
    ' NewskindID NewskindID from Kindnews where NewskindID in  ('+@ChoiceResult+N')' --print @sql
    exec(@sql)
    end
    GO
      

  20.   

    /longliangwang.web/allnews/2005-07/790a6d59-100a-4eed-8c53-361f921aea59.htm