Вам не нужен весь этот явный джаз курсора для построения строки. Вот, вероятно, более эффективный способ сделать это:
DECLARE @symbol NVARCHAR(MAX) = N'';
SELECT @symbol += ': Test.'
FROM dbo.tblSymbolsMain
ORDER BY Symbol;
Хотя я подозреваю, что вы действительно хотели увидеть названия символа, например,
DECLARE @symbol NVARCHAR(MAX) = N'';
SELECT @symbol += N':' + Symbol
FROM dbo.tblSymbolsMain
ORDER BY Symbol;
Одно предостережение в том, что, хотя вы, как правило, соблюдаете порядок следования, он не гарантируется. Поэтому, если вы хотите придерживаться курсора, по крайней мере объявите курсор следующим образом:
DECLARE symbolCursor CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
...
Также мне кажется, что NCHAR (10) недостаточно для хранения данных, которые вы пытаетесь вставить в него, если только у вас нет только одной строки (именно поэтому я выбрал NVARCHAR(MAX)
выше).
И я согласен с Абэ ... вполне возможно, что вам не нужно запускать хранимую процедуру для каждой строки в курсоре, но предложить способы обойти это (что почти наверняка будет более эффективным), мы ' Я должен понимать, что на самом деле делают эти хранимые процедуры.