Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2012:dynamiczne ograniczenie SQL (> 4000 znaków) (podział)

Nie musisz dzielić tekstu na części. Musisz upewnić się, że obcięcie nie nastąpi, gdy jesteś łączenie ciągów :

Upewnij się więc, że pierwsza konkatenacja działa z typem dużej wartości (i tym samym daje jako wynik typ dużej wartości), a każda kolejna konkatenacja powinna być zapisana przed obcięciem:

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

(Dzięki temu nie musisz wstawiać konwersji wszędzie )

To generuje błąd:

declare @t nvarchar(max)

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

exec sp_executesql @t

A to daje wynik 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. Jak zwrócić nazwy kolumn tabeli?

  2. Zmienna tabeli słaba wydajność podczas wstawiania w procedurze składowanej programu SQL Server

  3. Utwórz tabelę w SQL Server (T-SQL)

  4. Sparametryzowane zapytanie ..... oczekuje parametru „@units”, którego nie podano

  5. Czy każda tabela użytkowników powinna mieć indeks klastrowy?