Лучший отвечающий
T-SQL создание имени таблицы

Вопрос
-
Привет всем :)
Создаю таблицу обычным сценарием например
CREATE TABLE table_n
Но это стандартно, а интересно бы создавать динамичные имена таблицы с помощью переменных, но вот не знаю как это сделать :(
Например:
Мне нужно получить 3 таблицы с именами таблиц как
table1, table2, table3
Для этой задачи интересно использовать конкатенацию как
'table'+i
Но я не знаю, как можно потом сделать так, чтобы эта пер. varchar стала пригодной для именования таблицы. То есть можно ли отдельно именовать таблицу с помощью параметра типа varchar или что-то в этом роде? Что-то типа
setName('table'+i)
Заранее благодарен за полезные советы...- Перемещено I.Vorontsov 1 декабря 2009 г. 8:44 (От:Сообщество SQLClub.ru)
- Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:12 MSDN Forums consolidation (От:SQL Server для разработчиков)
6 октября 2009 г. 22:55
Ответы
-
Есть SMO (насколько я помню, начиная с 2005) - http://msdn.microsoft.com/en-us/library/ms162175.aspx. Кажется, это то, что вам нужно.
- Предложено в качестве ответа Denis ReznikMVP 9 октября 2009 г. 21:21
- Помечено в качестве ответа andrewmorozov 22 октября 2009 г. 4:01
9 октября 2009 г. 21:09 -
set @SQL='запрос в виде строки';
exec(@SQL)
или
EXECUTE sp_executesql @SQL
причем рекомендуется второй вариант как более производительный при частом использовании, но по длине используемого параметра у второго варианта 4000 символов, а у первого 8000, что при сложных запросах бывает важно :)- Помечено в качестве ответа andrewmorozov 8 октября 2009 г. 18:46
- Снята пометка об ответе andrewmorozov 8 октября 2009 г. 19:30
- Помечено в качестве ответа andrewmorozov 22 октября 2009 г. 4:01
8 октября 2009 г. 16:48
Все ответы
-
Используйте динамический SQL. Формируйте конкатенацией весь запрос. Потом EXEC либо sp_executesql. Но помните, что запросы, формируемые таким образом крайне не рекомендуется использовать в проектах, так как это открывает возможность атак SQL Injection. Ну а в целях администрирования, когда вы конролируете все параметры, пожалуйста.
- Предложено в качестве ответа Denis ReznikMVP 8 октября 2009 г. 19:28
6 октября 2009 г. 23:31 -
set @SQL='запрос в виде строки';
exec(@SQL)
или
EXECUTE sp_executesql @SQL
причем рекомендуется второй вариант как более производительный при частом использовании, но по длине используемого параметра у второго варианта 4000 символов, а у первого 8000, что при сложных запросах бывает важно :)- Помечено в качестве ответа andrewmorozov 8 октября 2009 г. 18:46
- Снята пометка об ответе andrewmorozov 8 октября 2009 г. 19:30
- Помечено в качестве ответа andrewmorozov 22 октября 2009 г. 4:01
8 октября 2009 г. 16:48 -
Да, sp_executesql предпочтительнее, я когда-то писал в своём блоге по этому поводу http://dev.net.ua/blogs/denisreznik/archive/2009/07/15/8664.aspx
8 октября 2009 г. 19:26 -
А интересно, есть ли стандартный набор скриптов для цикличного управления таблицами. Например удалять устаревшие, создавать новые, модифицировать код процедуры (представления) и т д?
Или нужно самому если нужно, то все писать ручками?
Я имею ввиду блоки библиотек или что-то в этом роде для стандартной работы с СУБД MS SQL server.8 октября 2009 г. 19:35 -
А интересно, есть ли стандартный набор скриптов для цикличного управления таблицами. Например удалять устаревшие, создавать новые, модифицировать код процедуры (представления) и т д?
Или нужно самому если нужно, то все писать ручками?
Я имею ввиду блоки библиотек или что-то в этом роде для стандартной работы с СУБД MS SQL server.
Насколько я помню, у вас SQL Server 2000. И насколько я понял вас не устраивают Enterprise Manager и Query Analyser. В 2005 - 2008 - прекрасный инструмент - Management Studio (не пробовал с 2000, но думаю будет работать). Вобщем советую подумать про апгрэйд своих решений, и переходить если это возможно, не пожалеете. Кроме того поддержка 2000 со стороны Microsoft уже вроде как закончилась http://blogs.msdn.com/johanolsson/archive/2008/04/16/microsoft-support-lifecycle-for-sql-server-200.aspx.8 октября 2009 г. 20:05 -
Студия разработки это конечно хорошо, но вопрос немного в другом :) Есть ли отдельно наборы библиотек - код в чистом виде + документация например. У ещё меня стоит и 2005, но вопрос о библиотеках интересен...9 октября 2009 г. 19:02
-
Есть SMO (насколько я помню, начиная с 2005) - http://msdn.microsoft.com/en-us/library/ms162175.aspx. Кажется, это то, что вам нужно.
- Предложено в качестве ответа Denis ReznikMVP 9 октября 2009 г. 21:21
- Помечено в качестве ответа andrewmorozov 22 октября 2009 г. 4:01
9 октября 2009 г. 21:09