Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2012:динамично SQL ограничение (> 4000 знака) (разделено)

Не е необходимо да разделяте текста на части. Трябва да сте сигурни, че съкращаването няма да се случи, докато сте конкатениране на низове :

Така че, уверете се, че първото конкатениране работи с тип голяма стойност (и по този начин произвежда голям тип стойност като резултат) и всяко следващо конкатениране трябва да бъде запазено от съкращаване:

set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...

(По този начин не е необходимо да вмъквате реализации навсякъде )

Това генерира грешка:

declare @t nvarchar(max)

set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'

exec sp_executesql @t

И това дава резултат 9000:

declare @t nvarchar(max)

set @t = CONVERT(nvarchar(max),'select LEN(''') + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'

exec sp_executesql @t


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да получа името на всички таблици от базата данни на SQL Server в C# приложение?

  2. Изтриване на дублиращи се записи само с една заявка

  3. Изпълнете sp_mforeachdb в Java приложение

  4. В SQL Server 2005 мога ли да направя каскадно изтриване, без да задавам свойството на моите таблици?

  5. 7645 Нулев или празен предикат на пълен текст