Bạn đã khai báo điều này là nvarchar (max) cho phép 2GB dữ liệu nên nó sẽ lưu trữ 2GB.
Điều gì đang xảy ra:
- Kiểu dữ liệu chưa phải là nvarchar (max) cho đến khi ấn định thành @ sql1
- Trước đó, đó là một tập hợp các chuỗi, mỗi chuỗi nhỏ hơn 4000 (hằng số)
- Bạn đang nối các hằng số ngắn với các biến ngắn (short =<4000)
- Vì vậy, bạn có 4000 ký tự được đưa vào @ sql1
Vì vậy, bạn phải đảm bảo rằng bạn có nvarchar (max) ở phía bên tay phải.
Một ý tưởng. Dòng thứ 2 nối nvarchar (max) với hằng =nvarchar (max)
SET @SQL1 = ''
SET @SQL1 = @SQL1 + 'SELECT DISTINCT Venue...
....
Nó không khác gì phép chia số nguyên xảy ra trong mọi ngôn ngữ.
declare @myvar float
set @myvar = 1/2 --gives zero because it's integer on the right
Ưu tiên toán tử (ưu tiên kiểu dữ liệu) luôn là "gán" sau cùng ... tại sao các chuỗi unicode trong SQL Server lại phải khác?