2012-03-06 4 views
2

Пожалуйста, помогите,SQL Ошибка вставки после 9 записей

На самом деле мой запрос в порядке, но проблема в том, когда после установки 9-записи из 10 записей он говорит, что есть ошибка на 10-е записи , но если я запустил запрос отдельно; 1-й запрос имеет 9 записей, тогда Второй запрос имеет только 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) 

Спасибо заранее.

+0

Какая ошибка? –

+0

'Msg 105, Level 15, State 1, Line 55 Незакрытая кавычка после символьной строки ''. Msg 102, Level 15, State 1, Line 55 Неверный синтаксис рядом с '' .' –

+0

thats ошибка, которую я получил –

ответ

1

Строка, которую вы объединяете, усекается до 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 ....... 
+0

^^, спасибо Mikael, это работает. но, можете ли вы рассказать мне об этом 'CAST' и о том, как это работает .. :) –

+0

@ArgelJoseph - Хорошо ... Я помню, как это видел где-то, но я не могу найти его сейчас. Я думаю, что это связано с преобразованием типов, когда вы объединяете строки. Строковые литералы не являются «varchar (max)», а «quotename» не является «varchar (max)», поэтому результат не будет «varchar (max)». Добавление 'cast ('' как varchar (max))' гарантирует, что хотя бы одна строка содержит «varchar (max)», поэтому конечным результатом будет «varchar (max)». –

+0

Нашел еще один вопрос о SO с лучшим объяснением. http://stackoverflow.com/questions/1371383/for-nvarcharmax-i-am-only-getting-4000-characters-in-tsql –

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