ALTER PROCEDURE saveMessageToMdb
(
   @TotalNo     int,
   @MonthNo     int ,
   @DwgNo     nvarchar(50),
   @TableName nvarchar(255)
   )
   
   
   
   
AS

DECLARE @selectStr nvarchar(2000)


SELECT  @selectStr ='INSERT INTO '+@TableName+'
(TotalNo,MonthNo,DwgNo)

VALUES (  '+@TotalNo+' ,MonthNo,'+@DwgNo+', )'


EXEC (@selectStr) 

运行时出现如下错误
将 nvarchar 值 'INSERT INTO 制六(TotalNo,MonthNo,DwgNo)
VALUES (  ' 转换为数据类型为 int 的列时发生语法错误。
制六为所输入的TableName 我尝试了很多次,都没有解决,请问错在什么地方?

解决方案 »

  1.   


    改為
    ALTER PROCEDURE saveMessageToMdb
    (
       @TotalNo     int,
       @MonthNo     int ,
       @DwgNo     nvarchar(50),
       @TableName nvarchar(255)
       )
    AS
    DECLARE @selectStr nvarchar(2000)
    SELECT  @selectStr ='INSERT INTO '+@TableName+'
    (TotalNo,MonthNo,DwgNo) VALUES (  '+Rtrim(@TotalNo)+' ,'+Rtrim(MonthNo)+','''+@DwgNo+''', )'
    EXEC (@selectStr)
      

  2.   

    ALTER PROCEDURE saveMessageToMdb
    (
       @TotalNo     int,
       @MonthNo     int ,
       @DwgNo     nvarchar(50),
       @TableName nvarchar(255)
       )
    AS

    DECLARE @selectStr nvarchar(2000)


    SELECT  @selectStr ='INSERT INTO '+@TableName+'
    (TotalNo,MonthNo,DwgNo)

    VALUES (  '+cast(@TotalNo as varchar)+' ,MonthNo,'+@DwgNo+', )'


    EXEC (@selectStr)
      

  3.   

    --你Print @selectStr 出来.执行看看,是不是数据类型没有匹配正确.
      

  4.   

    Int型,DateTime型數據插入數據庫需要做下轉換。而字符型需要在字符型變量前後加上單引號。如'''+@DwgNo+'''
      

  5.   

    alter PROCEDURE saveMessageToMdb
    (
       @TotalNo     int,
       @MonthNo     int ,
       @DwgNo     nvarchar(50),
       @TableName nvarchar(255)
       )
    AS

    DECLARE @selectStr nvarchar(2000)


    SELECT  @selectStr ='INSERT INTO '+@TableName+'
    (TotalNo,MonthNo,DwgNo) VALUES ('+cast(@TotalNo as varchar)+','+cast(@MonthNo as varchar)+','''+@DwgNo+''')'
     

    exec (@selectStr)