Синтаксическая ошибка при создании хранимой процедуры в SQL Server Management Studio - PullRequest
0 голосов
/ 25 марта 2020

В настоящее время я работаю над системой инвентаризации, которая позволит клиенту настраивать свои собственные SQL серверные таблицы.

The C# WPF GUI <<< PICTURE

Пользователь назовет свой столбец и укажет тип данных, который он хотел бы использовать. После того, как они удовлетворены своей таблицей, они нажимают кнопку отправки таблицы, чтобы создать свою таблицу. C# затем создаст уникальную таблицу для пользователя, запустив SQL Серверную хранимую процедуру.

SqlConnection connection = new SqlConnection(Constants.conn);
connection.Open();

string query = "EXEC CreateTable @TableName='"+ UserAccountInfo.Username + "InventoryTable'";

SqlCommand command = new SqlCommand(query, connection);
command.ExecuteReader();

Затем, используя foreach l oop, итерируя по каждому добавленному столбцу (класс UserTable мой пользовательский WPF UserControl), посмотрев на дочернюю панель стека StackTable и назначив свойства Usertable «Name» и «DataType» списку строковых массивов. Затем я перебираю список и выполняю вторую хранимую процедуру, которая изменяет ранее созданную таблицу.

Я верю, что все это работает !! Мой вопрос и проблема заключаются в моей хранимой процедуре.

List<string[]> list = new List<string[]>();

foreach (UserTable ut in StackTable.Children)
{
    string dataType = "";

    switch (ut.DataType.Text)
    {
        case "Text": dataType = "Varchar(100)"; break;
        case "Number": dataType = "INT"; break;
        case "Boolean": dataType = "Varchar(5)"; break;
    }

    string[] vs = {"[" + ut.Name.Text + "]", dataType};
    list.Add(vs);
}

foreach (string[] s in list)
{
    string query2 = "EXEC SelectAllCustomers @Name = '" + s[0] + "', @DataType = '" + s[1] + "';";

    SqlCommand command2 = new SqlCommand(query, connection);
    command2.ExecuteReader();
}

Моя схема базы данных состоит из базовой базы данных с именем InventoryDatabase, внутри таблицы с именем LoginInfo, где я храню информацию о пользователе, а остальные таблицы будут таблицами, которые мы создаем выше. ПРОБЛЕМА ЕСТЬ, мои хранимые процедуры выдают синтаксические ошибки.

SQL Server Management Studio Query of stored procedure <<< PICTURE

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вам придется использовать Dynami c SQL. Вот пример для начала:

create or alter procedure CreateTable @TableName varchar(100)
as
begin
     declare @sql nvarchar(max) = 
     concat('create table ',quotename(@TableName),' AccountId int primary key identity(1,1)');
     exec (@sql);
end

Обратите внимание, что имя передается через функцию quotename для защиты от SQL Injection.

0 голосов
/ 25 марта 2020

Вариант 1: подготовить сценарий SQL в виде строки, которая может создать или изменить таблицу в вашем коде C#, а затем выполнить подготовленную строку, используя метод ExecuteNonQuery.

Вариант 2: используя концепцию dynamici c SQL, подготовьте сценарий создания / изменения таблицы с помощью хранимой процедуры и затем выполните

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