Имя таблицы SQL Server как переменная - PullRequest
0 голосов
/ 21 января 2019

Я создаю веб-приложение, используя базу данных 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 )

1 Ответ

0 голосов
/ 22 января 2019
ELSE
    BEGIN
        set @sql = N'IF NOT EXISTS (SELECT IDBook FROM '+@TABLENAME+' WHERE IDBook = '''+@IDBOOK+''' )
            BEGIN
                INSERT INTO ' + @TABLENAME + '
                            VALUES ('''+@IDBOOK +''','''+ @QUANTITY + ''')
                END'
                EXEC sp_executesql  @SQL
                UPDATE Book SET InStock = InStock - @QUANTITY WHERE IDBook = @IDBOOK
                RETURN 0
            END

Попробуйте приведенный выше код ... не могу вспомнить причину, по которой вам нужно динамически создавать эту таблицу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...