2013-09-30 10 views
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),'[email protected]+','[email protected]+','[email protected]+','[email protected]+','[email protected]+','[email protected]+','[email protected]+','[email protected]+','[email protected]+')'; 
    PRINT @SQL 
    Exec @SQL 
+0

Когда вы PRINT @SQL, вы получаете весь запрос или усекаетесь? –

+0

я получить весь запрос ... Вставьте в AudittrailLog ( \t ddatetime , cmodulename , caudittype , ctablename , cfieldname , cfieldtype , coriginalval , cnewval , cuser , creason) значения (конвертировать (DateTime, GETDATE(), 105), тест, тест, тест, тест, тест, тест, тест, тест, тест) –

ответ

1

Вам нужно добавить дополнительные кавычки для VARCHAR значения

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

При печати он должен показать, как это.

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) 
+0

, когда я вызываю хранимую процедуру, которую он все еще дает мне, не является допустимым идентификатором, но когда я копирую запрос печати. он работает .. –

+0

Его работа сейчас .. большое спасибо –

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),'''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''')'; 
    PRINT @SQL 
    Exec @SQL 

Я надеюсь, что я не пропустите ни одного из ''.

0

Является ли ваш вопрос просто образцом или вашей фактической процедурой?

Поскольку нет никакой причины использовать динамический SQL для этой процедуры. Ваш запрос статичен. Это простая вставка, где известны все поля. Почему вы просто не используете инструкцию INSERT напрямую?

Смежные вопросы