none
T-SQL создание имени таблицы RRS feed

  • Вопрос

  • Привет всем :)

    Создаю таблицу обычным сценарием например

    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