0

このストアド プロシージャを実行しようとすると、有効な識別子エラーではないというエラーが表示されます。

CREATE Proc [dbo].[AddLogtrail]
    @cmodule varchar(100),   
    @caudittype varchar(15),     
    @ctable varchar(100),    
    @cfield varchar(100),    
    @cfieldtype varchar(100),   
    @coriginalval varchar(100),      
    @cnewval    varchar(100),    
    @cuser varchar(100),     
    @creason varchar(100)     AS    

    DECLARE @SQL  varchar (400)     
    set  @SQL = 'Insert into AudittrailLog (ddatetime,cmodulename,caudittype,ctablename,cfieldname,cfieldtype,coriginalval,cnewval,cuser,creason) values ' + 
    '(convert(datetime,GETDATE(),105),'+@cmodule+','+@caudittype+','+@ctable+','+@cfield+','+@cfieldtype+','+@coriginalval+','+@cnewval+','+@cuser+','+@creason+')';
    PRINT @SQL
    Exec @SQL
4

3 に答える 3

1

varchar 値に追加の引用符を追加する必要があります

set  @SQL = 'Insert into AudittrailLog (ddatetime,cmodulename,caudittype,ctablename,cfieldname,cfieldtype,coriginalval,cnewval,cuser,creason) values ' + 
    '(convert(datetime,GETDATE(),105),'''+@cmodule+''','''+@caudittype+''','''+@ctable+''','''+@cfield+''','''+@cfieldtype+''','''+@coriginalval+''','''+@cnewval+''','''+@cuser+''','''+@creason+''')';

印刷すると、このように表示されるはずです。

Insert into AudittrailLog ( ddatetime ,cmodulename ,caudittype ,ctablename ,cfieldname ,cfieldtype ,coriginalval ,cnewval ,cuser ,creason) values (convert(datetime,GETDATE(),105),'test','test','test','test','test','test','test','test','test')

また、以下のように実行します

EXEC (@SQL)
于 2013-09-30T06:27:13.490 に答える
0

varcharそれぞれを '' でラップする必要があります:

CREATE Proc [dbo].[AddLogtrail]
    @cmodule varchar(100),   
    @caudittype varchar(15),     
    @ctable varchar(100),    
    @cfield varchar(100),    
    @cfieldtype varchar(100),   
    @coriginalval varchar(100),      
    @cnewval    varchar(100),    
    @cuser varchar(100),     
    @creason varchar(100)     AS    

    DECLARE @SQL  varchar (400)     
    set  @SQL = 'Insert into AudittrailLog (ddatetime,cmodulename,caudittype,ctablename,cfieldname,cfieldtype,coriginalval,cnewval,cuser,creason) values ' + 
    '(convert(datetime,GETDATE(),105),'''+@cmodule+''','''+@caudittype+''','''+@ctable+''','''+@cfield+''','''+@cfieldtype+''','''+@coriginalval+''','''+@cnewval+''','''+@cuser+''','''+@creason+''')';
    PRINT @SQL
    Exec @SQL

「」のどれも見逃さなかったことを願っています。

于 2013-09-30T06:28:42.000 に答える