Не в состоянии заставить ВСТАВКУ SP работать - PullRequest
0 голосов
/ 04 августа 2011

Я не могу заставить часть INSERT описанной ниже процедуры работать. Любая помощь будет оценена ....

@currTable varchar(100),
@ID int,
@short_Text varchar(250),
@brief_Descrip varchar(250) = Null,
@needsTranslation varchar(10) = Null,
@prev_LangString varchar(250) = Null,
@lang_String varchar(250) = Null,
@original_lang_String varchar(250) = Null,
@StringID_from_Master int,
@GUID varchar(250) = Null

        AS

        BEGIN

        SET NOCOUNT ON;    

        DECLARE @submitDate1 DATETIME;
        SET @submitDate1 = GETDATE()
        SET @prev_LangString = @original_lang_String

        DECLARE @sql NVARCHAR(MAX);

        SELECT @sql = N' UPDATE  ' + QUOTENAME(@currTable) + ' SET [lang_String] = ''' + REPLACE(@lang_String,'''','''''') + ''', [date_Changed] = ''' +  convert(varchar(20), @submitDate1) + ''', [prev_LangString] = ''' + @prev_LangString + ''', [needsTranslation] = ''' + @needsTranslation + ''' WHERE ID = ' + RTRIM(@ID) +  '; ';  

            EXEC sp_executesql @sql;    

            INSERT tblPendingDBUpdates    
                (      stringMasterID,
                       databaseName,
                       databaseStringID,
                       englishText,
                       foreignLangText,
                       submitDate,
                       GUID   
                )   

            SELECT      @StringID_from_Master,
                        Database_Name,
                        dbKeyID_ofStringName,
                        @short_Text,
                        @lang_String,
                        @submitDate1,
                        @GUID    
            FROM      tblDBUsage      
            WHERE tblUniquetblStringsMaster_ID = @StringID_from_Master;


            END 

Я пробовал только этот блок кода, и, к счастью, он не вставил в tblPendingDBUpdates .... Заметил что-то странное в GUID, так как имя поля изменило его в таблице ...

        AS

        BEGIN

        SET NOCOUNT ON;    

        DECLARE @submitDate1 DATETIME;
        SET @submitDate1 = GETDATE()
       -- SET @prev_LangString = @original_lang_String

        DECLARE @sql NVARCHAR(MAX);

        DECLARE @currTable varchar(100);
        SET @currTable = 'tblLangenUS'
        DECLARE @ID INT;
        SET @ID = 2
        DECLARE @short_Text varchar(250);
        SET @short_Text = 'testing99'
        DECLARE @StringID_from_Master INT;
        SET @StringID_from_Master = 2    

        DECLARE @lang_String varchar(250);
        SET @lang_String = 'testing9999'
        DECLARE @GUID1 varchar(250);
        SET @GUID1 = 'Null'


            INSERT tblPendingDBUpdates    
                (      stringMasterID,
                       databaseName,
                       databaseStringID,
                       englishText,
                       foreignLangText,
                       submitDate,
                       GUID1
                )  

            SELECT      @StringID_from_Master,
                        Database_Name,
                        dbKeyID_ofStringName,
                        @short_Text,
                        @lang_String,
                        @submitDate1,
                        @GUID1    
            FROM      tblDBUsage      
            WHERE tblUniquetblStringsMaster_ID = @StringID_from_Master;


            END 

Ответы [ 3 ]

0 голосов
/ 04 августа 2011

Я действительно не знаю, что вам нужно, но вот сохраненный процесс с вашими объявлениями

CREATE PROCEDURE TestProc
    AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @submitDate1 DATETIME
        SET @submitDate1 = GETDATE()
    DECLARE @sql NVARCHAR(MAX)
    DECLARE @StringID_from_Master INT
        SET @StringID_from_Master = 2  
    DECLARE @short_Text varchar(250)
        SET @short_Text = 'testing99' 
    DECLARE @lang_String varchar(250)
        SET @lang_String = 'testing9999'
       DECLARE @GUID1 varchar(250)
        SET @GUID1 = 'Null'

    BEGIN 
        EXEC sp_executesql @sql
    END

    BEGIN 
        INSERT INTO tblPendingDBUpdates 
        (
            stringMasterID,
            databaseName,
            databaseStringID,
            englishText,
            foreignLangText,
            submitDate,
            GUID1
        )
        SELECT  
            @StringID_from_Master,
            Database_Name,
            dbKeyID_ofStringName,
            @short_Text, 
            @lang_String, 
            @submitDate1,
            @GUID1
        FROM tblDBUsage
        WHERE tblUniquetblStringsMaster_ID = @StringID_from_Master
    END
END
GO
0 голосов
/ 05 августа 2011

Если вы не получаете сообщение об ошибке и не вставляете ноль строк, оператор выбора не должен ничего возвращать.

что это возвращает?

select *
FROM      tblDBUsage      
WHERE tblUniquetblStringsMaster_ID = @StringID_from_Master

Если вы первыйсохраненный процесс не выглядел так, как будто @StringID_from_Master когда-либо был установлен.Это может быть вашей проблемой.

0 голосов
/ 04 августа 2011

Ну, насколько я понимаю ... измените код SP на приведенный ниже и попробуйте снова ... скорее всего, будет работать нормально

CREATE PROCEDURE <SOME NAME>
AS
BEGIN

 <ALL YOUR DECLARATION HERE>

BEGIN

EXEC sp_executesql @sql;
END

GO

BEGIN

INSERT INTO tblPendingDBUpdates 
(stringMasterID,
databaseName,
databaseStringID,
englishText,
foreignLangText,
submitDate,
GUID1)
SELECT  @StringID_from_Master,
Database_Name,
dbKeyID_ofStringName,
@short_Text, 
@lang_String, 
@submitDate1,
@GUID1
FROM tblDBUsage
WHERE tblUniquetblStringsMaster_ID = @StringID_from_Master; 
END  
END
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...