Я хотел использовать оператор print для отладки некоторых динамических sql, так как я думаю, что большинство из вас использует print по аналогичным причинам.
Я попробовал несколько перечисленных решений и обнаружил, что решение Келси работает снезначительные изменения (@sql - мой @script) nb LENGTH - недопустимая функция:
--/6287510/kak-raspechatat-varchar-max-s-pomoschy-print-statement
--Kelsey
DECLARE @Counter INT
SET @Counter = 0
DECLARE @TotalPrints INT
SET @TotalPrints = (LEN(@sql) / 4000) + 1
WHILE @Counter < @TotalPrints
BEGIN
PRINT SUBSTRING(@sql, @Counter * 4000, 4000)
SET @Counter = @Counter + 1
END
PRINT LEN(@sql)
Этот код, как прокомментировано, добавляет новую строку в вывод, но для отладки это не проблемадля меня.
Идея Бена Б идеальна и является наиболее элегантной, хотя для отладки очень много строк кода, поэтому я решил использовать свою небольшую модификацию Келси.Возможно, стоит создать систему, подобную хранимой процедуре в msdb, для кода Бена Б, который можно использовать повторно и вызывать в одну строку?
К сожалению, код Альфокса не работает, потому что это было бы проще.