У меня есть хранимая процедура, которая динамически генерирует таблицу для хранения промежуточных данных для импорта.Эта процедура работала нормально до среды.Я отследил это до одной конкретной области.Код, вызывающий проблему:
DECLARE @strSQL NVARCHAR(MAX) = N'';
SELECT @strSQL = @strSQL + N',[' + CustomerField + N'] NVARCHAR(MAX)' + CHAR(10)
FROM dbo.WebServices
WHERE CallType = 'customer'
AND IsPrimaryTable = 1
AND Source = 'clientName'
ORDER BY TagOrder;
SET @strSQL = STUFF(@strSQL, 1, 1, 'CREATE TABLE ' + 'TableName' + CHAR(10) + '(')+ N')';
PRINT @strSQL
Примечание.Таблица, из которой она извлекается, содержит список столбцов, и данные также не изменились.Существует около 34 строк данных без специальных символов, и они не доступны для клиентов.
Это дает мне вывод:
CREATE TABLE TableName
([CUSACNR2] NVARCHAR(MAX)
)
Запуск этого на том же самомданные даже в том же окне в SSMS с дополнительным фильтром TOP
дают ожидаемые результаты, т.е.
DECLARE @strSQL NVARCHAR(MAX) = N'';
SELECT TOP (99999) @strSQL = @strSQL + N',[' + CustomerField + N'] NVARCHAR(MAX)' + CHAR(10)
FROM dbo.WebServices
WHERE CallType = 'customer'
AND IsPrimaryTable = 1
AND Source = 'clientName'
ORDER BY TagOrder;
SET @strSQL = STUFF(@strSQL, 1, 1, 'CREATE TABLE ' + 'TableName' + CHAR(10) + '(')+ N')';
PRINT @strSQL
. Генерирует динамический SQL:
CREATE TABLE TableName
([TAG] NVARCHAR(MAX)
,[CUSACNR] NVARCHAR(MAX)
.
.
.
,[SHIPPING_POSTAL_CODE] NVARCHAR(MAX)
,[CUSACNR2] NVARCHAR(MAX)
)
Хотя я отслеживал это в одном конкретном хранимом процессе, мы часто используем этот метод для построения динамического SQL, и я вижу ошибки, появляющиеся во многих местах.Я предполагаю, что что-то изменилось на сервере, поскольку это начало происходить в нескольких базах данных одновременно.
Кто-нибудь знает что-нибудь, что могло вызвать эту проблему?Это устаревшая система, которая долгое время работала нормально, и перекодировать каждый экземпляр этого вида деятельности нельзя.