SQL SERVER 2000 TRUNCATES SQL STRING генерируется с использованием динамического SQL
Я пытаюсь сгенерировать оператор обновления для более чем 90 таблиц, используя код ниже:
Declare @cmd VARCHAR(8000)
Select @cmd = COALESCE(@cmd,'') +
'
UPDATE ' + TABLE_NAME + ' SET ' + Column_Name + ' = ''000000000''' + '''
WHERE ' + Column_Name + ' = ''000000001''' + '''
'
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME not in (SELECT TABLE_NAME
From INFORMATION_SCHEMA.VIEWS)
and
(Column_Name like 'SSN%'
OR Column_Name LIKE 'ssn%'
OR Column_Name LIKE 'ssn%'
OR Column_Name LIKE '%_ssn%'
OR Column_Name LIKE '_ocsecno'
OR Column_Name LIKE 'Ssn%');
Select @cmd
Код работает, но SQL Server 2000 способен генерировать операторы обновления только для 45 таблиц из 91 таблицы. он обрезает строку SQL в 45-й таблице. Кто-нибудь знает, как решить эту проблему?
1 ответ
Решение
Если вы просто пытаетесь сгенерировать операторы обновления, вы можете вставить обновления во временную таблицу.
SELECT
'
UPDATE ' + TABLE_NAME + ' SET ' + Column_Name + ' = ''000000000''' + '''
WHERE ' + Column_Name + ' = ''000000001''' + '''
' AS [query]
INTO
#tempCmd
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME NOT IN (SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.VIEWS)
AND (Column_Name LIKE 'SSN%'
OR Column_Name LIKE 'ssn%'
OR Column_Name LIKE 'ssn%'
OR Column_Name LIKE '%_ssn%'
OR Column_Name LIKE '_ocsecno'
OR Column_Name LIKE 'Ssn%');
SELECT [query] FROM #tempCmd