Ошибка SQL при вставке после 9-й записи - PullRequest
2 голосов
/ 06 марта 2012

Пожалуйста, помогите,

На самом деле мой запрос в порядке, но проблема в том, что после вставки 9-й записи из 10 записей он говорит, что в 10-й записи есть ошибка, но если я выполняю запрос отдельно; 1-й запрос имеет 9 записей , затем 2-й запрос имеет только 1 , и обе не содержат ошибок.

ниже приведен запрос, который я использовал:

DECLARE @tblLkUp    VARCHAR(MAX),
        @tblLkUpCol VARCHAR(MAX),
        @strSQL     VARCHAR(MAX)

SET @tblLkUp = 
    (SELECT DISTINCT TOP 1 t.name AS TableName 
     FROM sys.tables t JOIN sys.indexes i ON i.index_id = t.schema_id  
     WHERE t.name LIKE '%$POS Lookup')

SET @tblLkUpCol = 
    (SELECT DISTINCT TOP 1 t.name AS TableName 
     FROM sys.tables t JOIN sys.indexes i ON i.index_id = t.schema_id  
     WHERE t.name LIKE '%$POS Lookup Columns')


SET @strSQL = 'IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUp) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'') = 0
                    BEGIN
                        INSERT INTO ' + QUOTENAME(@tblLkUp) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''Zoom Trans. SPO Line Details'', '''', 
                        ''ZOOM'', ''1'', ''99008981'', ''2'', ''10'', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''', '''', ''0'', ''0'', 
                        ''0'', ''0'', ''0'', ''0'', '''', ''1'', '''', '''', '''', '''', '''', ''0'', ''0'', ''0'', '''', '''', ''0'', ''0'', 
                        ''0'', ''0'', '''', '''', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'')

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''1'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''1'', ''2'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''2'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''2'', ''5'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''3'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''3'', ''10'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''4'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''4'', ''10012700'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''5'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''5'', ''10012701'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''6'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''6'', ''10012702'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''7'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''7'', ''10012703'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''8'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''8'', ''10012704'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''9'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''9'', ''10012705'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END

                        IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUpCol) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'' AND [Table No_] = ''99008981'' AND [Column No_] = ''10'') = 0
                            BEGIN
                                INSERT INTO ' + QUOTENAME(@tblLkUpCol) + ' VALUES(DEFAULT, '''', ''ZOOMSPODTL'', ''99008981'', ''10'', ''10012750'', ''0'', ''0'', '''', ''0'', ''0'', '''', ''0'', ''0'', ''0'', '''')
                            END
                    END'
EXEC (@strSQL)

Заранее спасибо.

1 Ответ

1 голос
/ 06 марта 2012

Строка, которую вы объединяете, усекается до 4000 символов.Чтобы это исправить, вы можете сначала добавить cast('' as varchar(max)) в присвоении к @strSQL.

SET @strSQL = cast('' as varchar(max)) + 
              'IF (SELECT COUNT(*) FROM ' + QUOTENAME(@tblLkUp) + ' WHERE [Lookup ID] = ''ZOOMSPODTL'') = 0
                    BEGIN
                        INSERT INTO .......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...