Можно ли создать таблицу с именем таблицы как GUID

это возможно сделать

DECLARE @guid uniqueidentifier = NEWID();
select @guid

CREATE TABLE @guid
(
    [UserId] uniqueidentifier NOT NULL DEFAULT NewID(),
    [FirstName] nvarchar(30),
    [LastName] nvarchar(30),
    [Email] nvarchar(50)
)

Я просто пробую эту концепцию, если она работает, я буду использовать ее в своем веб-приложении.

приведенный выше код не работает

Какая польза от таблицы со случайным именем?

Nico Haase 11.02.2023 21:14

это сложно объяснить, но я создам каждую таблицу для конкретного пользователя, запишу это имя таблицы внутри пользователя таблицы для справки.

Code Noob 11.02.2023 21:16

Звучит как ужасный дизайн базы данных

Nico Haase 11.02.2023 21:17

Они не спрашивали, хороший ли это дизайн, они спрашивали, можно ли сделать то, что они хотят.

gowner 11.02.2023 21:20

Какое сообщение об ошибке вы получаете, когда запускаете запрос, который не работает?

Anthony Norwood 11.02.2023 21:29

@gowner всегда стоит пытаться обучить новичков лучшим методам проектирования.

Dale K 12.02.2023 07:09

Я открыт для предложений, @DaleK, большое спасибо за ваш жест, я изначально думал, что добавление в разные таблицы сэкономит время при загрузке данных из БД в приложение, поэтому я так подумал.

Code Noob 12.02.2023 09:14

SQL в первую очередь предназначен для статической схемы, а не для изменения на лету. И обычно у вас есть пользовательская таблица со строкой для каждого пользователя, а любые другие таблицы, относящиеся к пользователю, имеют столбец идентификатора пользователя с внешним ключом для пользовательской таблицы.

Dale K 12.02.2023 09:38

Я не понимаю, почему ты когда-либо хотел это сделать. Похоже, вам нужна только одна таблица с другим столбцом Guid для определения массового импорта.

Charlieface 12.02.2023 19:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете напрямую использовать имя динамической таблицы, но вы можете сначала построить SQL в строковой переменной и выполнить ее; техника известна как динамический SQL:

DECLARE @guid uniqueidentifier = NEWID();
DECLARE @strSql nvarchar(max)= N'CREATE TABLE ['+cast(@guid as nvarchar(50))+']
(
    [UserId] uniqueidentifier NOT NULL DEFAULT NewID(),
    [FirstName] nvarchar(30),
    [LastName] nvarchar(30),
    [Email] nvarchar(50)
)'
select @guid
exec sp_executesql @strSql;

Я добавил квадратные скобки вокруг имени таблицы, потому что представление guid по умолчанию содержит дефисы.

Если источник имени таблицы не является идентификатором GUID (т. е. может содержать специальные символы, предоставленные пользователем и т. д.), рекомендуется очистить его перед использованием. Вы можете использовать QUOTENAME() для этой цели:

... + quotename(cast(@guid as nvarchar(50))) + ...

Гораздо безопаснее использовать QUOTENAME(), чем вручную печатать [ и ].

Aaron Bertrand 11.02.2023 22:05

Согласитесь, безопаснее использовать эту функцию, если имя получено из ненадежных источников. В этом примере это не имеет никакого значения.

tinazmu 11.02.2023 23:42

Последовательность и подача хороших примеров > «На этот раз все в порядке».

Aaron Bertrand 12.02.2023 00:51

@tinazmu - контрапункт: вам не нужно прыгать через какие-либо дополнительные обручи, чтобы сделать это с quotename(). Так что же вы сохранили (кроме девяти символов)?

Ben Thul 12.02.2023 18:33

@BenThul, я против того, чтобы делать что-то без причины, и в этом случае нет никакого риска (вы бы носили шляпу в помещении, потому что это хорошая практика?)

tinazmu 12.02.2023 22:07

Вы бы показали ребенку, как пить из бутылочки с хлорной известью, только в том случае, если бы вы знали, что бутылка тщательно вымыта и наполнена апельсиновым соком? Или что круто не пристегиваться ремнем безопасности, когда просто подъезжаешь к углу? Другими словами, зачем продвигать методы, которые иногда могут быть вредными, вместо методов, которые всегда безопаснее?

Aaron Bertrand 12.02.2023 22:33

Между тем, вы назначаете переменную nvarchar, не обозначая строку префиксом N, еще одна вещь, которая может не сломаться здесь, но может сломаться в других сценариях, когда люди «учатся» на вашем коде.

Aaron Bertrand 12.02.2023 22:34

Приятно добавить заявление об отказе от ответственности после кода, в котором говорится: «Если у вас есть уязвимость, вы можете сделать это вместо этого»… но все же, почему бы не делать все время более безопасные вещи? Читатели не обязательно будут знать, что им может понадобиться «очистить» ввод, и я не знаю, почему вы когда-либо предлагали метод, который может сломаться. «Причина», которую вы ищете, заключается в том, что обучение людей «лучшим практикам» намного лучше, чем обучение их «практикам, которые в большинстве случаев приемлемы».

Aaron Bertrand 12.02.2023 23:11

Другие вопросы по теме