#tsql
#tsql
Вопрос:
У меня проблема с TSQL. У меня есть несколько таблиц, каждая таблица содержит разное количество полей с разными именами.
Мне нужно динамически брать все эти таблицы, читать все записи и управлять каждой записью в списке строк, где каждое значение разделяется запятыми. И сделайте что-нибудь. с помощью этой строки.
Я думаю, что мне нужно использовать КУРСОРЫ, но я не могу ПОЛУЧИТЬ их, не зная конкретного количества полей с именами и типами. Может быть, я могу создать табличную переменную с динамическим количеством полей?
Большое спасибо!
Макаров Артем.
Ответ №1:
Я бы перепрофилировал один из многих сценариев T-SQL, написанных для генерации инструкций INSERT. Они делают именно то, что вам нужно. А именно
- Обратное проектирование данной таблицы для определения имен и типов столбцов
- Сгенерируйте строку значений с разделителями
Наиболее полный пример, который я нашел, находится здесь
Но простой поиск в Google по запросу «ГЕНЕРАТОР ИНСТРУКЦИЙ ВСТАВКИ» даст несколько примеров, которые вы можете изменить в соответствии с вашими потребностями.
Удачи!
Ответ №2:
SELECT
ORDINAL_POSITION
,COLUMN_NAME
,DATA_TYPE
,CHARACTER_MAXIMUM_LENGTH
,IS_NULLABLE
,COLUMN_DEFAULT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'MYTABLE'
ORDER BY
ORDINAL_POSITION ASC;
из http://weblogs.sqlteam.com/joew/archive/2008/04/27/60574.aspx
Комментарии:
1. Я бы использовал объект в своем приложении для представления таблицы после получения результирующего набора из приведенного выше запроса. Если вы хотите сделать это на чистом SQL, я не знаю достаточно, чтобы ответить осмысленно.
2. К сожалению, я использую только чистый SQL. Спасибо!
Ответ №3:
Возможно, вы можете что-то с этим сделать.
select T2.X.query('for $i in *
return concat(data($i), ",")'
).value('.', 'nvarchar(max)') as C
from (
select *
from YourTable
for xml path('Row'),elements xsinil, type
) as T1(X)
cross apply T1.X.nodes('/Row') T2(X)
Это даст вам одну строку для каждой строки в YourTable
с каждым значением в YourTable
, разделенным запятой в столбце C
.
Это создает XML для всей таблицы, а затем анализирует этот XML. У вас могут возникнуть проблемы, если у вас есть таблицы с большим количеством строк.
Кстати: я видел из комментария, что вы можете «использовать только чистый SQL». Я действительно не думаю, что это квалифицируется как «чистый SQL» :).
Комментарии:
1. Ха! Спасибо
Но я даже не могу этого понять
Я уже это делаю.. Это было очень сложно
![]()