Я создаю веб-приложение, используя базу данных sql server.Мне нужно динамически создавать таблицы для корзины для каждого пользователя в соответствии с пользовательским вводом.Я успешно создал таблицу, но когда мне нужно проверить, что выбранный элемент существует в таблице, я столкнулся с проблемой, не могли бы вы помочь мне решить эту проблему?
дополнительная информация:
Iу меня есть две таблицы dbo.Book
, которые были созданы ранее, и dbo.@TABLENAME
, которые подключены к dbo.Book через IDBook.
- это код, который я пробовал.
alter PROC insert_items
@TABLENAME NVARCHAR(100),
@IDBOOK NVARCHAR(6),
@QUANTITY NVARCHAR(3)
AS
DECLARE @SQL NVARCHAR(MAX)
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TABLENAME)
BEGIN
IF EXISTS (SELECT InStock, IDBook FROM Book WHERE InStock > 0
AND IDBook = @IDBOOK AND InStock >= @QUANTITY)
BEGIN
SET @SQL = 'CREATE TABLE ' + @TABLENAME + '(
id INT NOT NULL IDENTITY PRIMARY KEY,
IDBook INT NOT NULL,
Quantity INT NOT NULL,
CONSTRAINT [FK_'+ @TABLENAME +'_Book] FOREIGN KEY([IDBook])
REFERENCES [dbo].[Book] ([IDBook])
ON UPDATE CASCADE
ON DELETE CASCADE )
INSERT INTO ' + @TABLENAME + '
VALUES ('''+@IDBOOK +''','''+ @QUANTITY + ''')'
EXEC sp_executesql @SQL
UPDATE Book SET InStock = InStock - @QUANTITY WHERE IDBook = @IDBOOK
RETURN 0
END
ELSE
BEGIN
RETURN 1
END
END
ELSE
BEGIN
IF NOT EXISTS (SELECT IDBook FROM @TABLENAME WHERE IDBook = @IDBOOK )
BEGIN
SET @SQL = 'INSERT INTO ' + @TABLENAME + '
VALUES ('''+@IDBOOK +''','''+ @QUANTITY + ''')'
EXEC sp_executesql @SQL
UPDATE Book SET InStock = InStock - @QUANTITY WHERE IDBook = @IDBOOK
RETURN 0
END
END
Сообщение 1087, Уровень 16, Состояние 1, Процедура insert_items, Строка 36 [Стартовая Строка 0 Строка] Необходимо объявить табличную переменную "@TABLENAME".
ошибка для этих строк
IF NOT EXISTS (SELECT IDBook FROM @TABLENAME WHERE IDBook = @IDBOOK )