0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8

Заполнение таблицы через динамический запрос

19.04.2017, 13:40. Показов 2032. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
При выполнении данного кода
SQL
1
2
3
4
5
6
7
8
9
DECLARE @KS INT,@NAME NVARCHAR(50),@TYPE NCHAR(10),@OCENKA NCHAR(10),@PROPUSKI INT
DECLARE @SQL NVarchar(4000)
SET                @KS = 90
SET                @TYPE = 'ZACHET'
SET                @NAME='матан'
SET                @OCENKA = 'zach'
SET                @PROPUSKI = 5
SET                @SQL = 'INSERT INTO Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+@KS+' ,'+@NAME+','+@TYPE+','+@OCENKA +','+@PROPUSKI+'  )'
EXEC sp_executesql @SQL
выдает ошибку:
Источник ошибки: .Net SqlClient Data Provider
Сообщение об ошибке: Ошибка преобразования значения varchar "'INSERT INTO Матан (КС, Название, Тип, Оценка, Пропуски) VALUES (" в тип данных int.
Помогите пожалуйста. Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2017, 13:40
Ответы с готовыми решениями:

Запрос на заполнение таблицы БД через форму php
Помогите пожалуйста найти ошибку. есть файл index.php в котором создана форма <?php include('db.php'); $quer =...

как создать запрос на заполнение в полей таблицы Access через delphi
как создать запрос на заполнение в полей таблицы Access через delphi, при помощи Editов

Запрос на заполнение таблицы из кода C#
Привет всем, столкнулся с такой проблемой: не могу найти, как вывести на SQL Server двумерный массив, созданный в C#. Подробнее:...

10
119 / 111 / 47
Регистрация: 09.07.2013
Сообщений: 209
19.04.2017, 13:46
T-SQL
1
SET @SQL = N'INSERT INTO Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+CAST(@KS AS nvarchar)+' ,'+@NAME+','+@TYPE+','+@OCENKA +','+CAST(@PROPUSKI AS nvarchar)+'  )'
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
19.04.2017, 14:02  [ТС]
Благодарю, но появилось новая проблема:

Источник ошибки: .Net SqlClient Data Provider
Сообщение об ошибке: "Недопустимое имя столбца "матан."
Недопустимое имя столбца "ZACHET."
Недопустимое имя столбца "zach.""

Код:
SQL
1
2
3
4
5
6
7
8
9
DECLARE @KS INT,@NAME NVARCHAR(50),@TYPE NCHAR(10),@OCENKA NCHAR(10),@PROPUSKI INT
DECLARE @SQL NVarchar(4000)
SET                @KS = 90
SET                @TYPE = 'ZACHET'
SET                @NAME='матан'
SET                @OCENKA ='zach'
SET                @PROPUSKI = 5
SET @SQL = N'INSERT Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+CAST(@KS AS nvarchar)+' ,'+@NAME+','+@TYPE+','+@OCENKA +','+CAST(@PROPUSKI AS nvarchar)+'  )'
EXEC sp_executesql @SQL
А если прописать самому:
SQL
1
2
3
4
5
6
7
8
9
DECLARE @KS INT,@NAME NVARCHAR(50),@TYPE NCHAR(10),@OCENKA NCHAR(10),@PROPUSKI INT
DECLARE @SQL NVarchar(4000)
SET                @KS = 7
SET                @TYPE = 'ZACHET'
SET                @NAME='матан'
SET                @OCENKA ='zach'
SET                @PROPUSKI = 5
SET @SQL = N'INSERT Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+CAST(@KS AS nvarchar)+' ,''матан'',''ZACHET'',''zach'','+CAST(@PROPUSKI AS nvarchar)+'  )'
EXEC sp_executesql @SQL
то работает. В чем может быть проблема?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
19.04.2017, 14:52
в том, что во втором случае у вас текстовые константы обрамлены апострофами и воспринимаются как текстовые константы, а в первом случае без апострофов, просто следуют через запятую и воспринимаются как поля

Добавлено через 3 минуты
З.Ы. Ничего "динамического" я в ваших запросах не наблюдаю. Почему бы не написать честный и правильный запрос, а не формировать строку запроса?
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
20.04.2017, 09:56  [ТС]
Потому что я пишу программу, в которой выбирается название предмета и с этим названием создается таблица. И как я понял, в SQL нет возможности использовать в некоторых частях запроса значения переменных, и единственным решением является использование строки запроса.

Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
System.Data.SqlClient.SqlConnection sqlConnection1 =
            new System.Data.SqlClient.SqlConnection("Data Source=(local);Initial Catalog=mod;Integrated Security=True");
 
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Connection = sqlConnection1;
 
            sqlConnection1.Open();
           
            cmd.Parameters.Add("@KS", SqlDbType.Int);
            cmd.Parameters.Add("@FIO", SqlDbType.NVarChar);
            cmd.Parameters.Add("@NAME", SqlDbType.NVarChar);
            cmd.Parameters.Add("@OCENKA", SqlDbType.NChar);
            cmd.Parameters.Add("@TYPE", SqlDbType.NChar);
            cmd.Parameters.Add("@PROPUSKI", SqlDbType.Int);
 
            cmd.Parameters["@FIO"].Value = textBox1.Text.Trim();
            cmd.Parameters["@OCENKA"].Value = comboBox2.Text.Trim();
            cmd.Parameters["@NAME"].Value = comboBox1.Text.Trim();
            cmd.Parameters["@TYPE"].Value = type;
            cmd.Parameters["@PROPUSKI"].Value = int.Parse(textBox2.Text);
            cmd.Parameters["@KS"].Value = i + 1;
           cmd.CommandText = "INSERT Студент (КС, ФИО) VALUES (@KS, @FIO)";
           cmd.ExecuteNonQuery();
            cmd.CommandText = "DECLARE @SQL varchar(8000)"+
             "SET @SQL = N'INSERT Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+CAST(@KS AS nvarchar)+' ,'+@NAME+','+@TYPE+','+@OCENKA +','+CAST(@PROPUSKI AS nvarchar)+')'"
            + "exec sp_executesql @SQL";
 
            cmd.ExecuteNonQuery();
            sqlConnection1.Close();
Заранее извиняюсь, если в коде есть глупые ошибки, просто с sql недавно начал работать.
Миниатюры
Заполнение таблицы через динамический запрос  
0
119 / 111 / 47
Регистрация: 09.07.2013
Сообщений: 209
20.04.2017, 11:30
T-SQL
1
SET @SQL = N'INSERT INTO Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ('+CAST(@KS AS nvarchar)+' ,'''+@NAME+''','''+@TYPE+''','''+@OCENKA +''','+CAST(@PROPUSKI AS nvarchar)+'  )'
1
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
20.04.2017, 11:39
Нужно
T-SQL
1
DECLARE @SQL nvarchar(8000)
1
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
20.04.2017, 11:50  [ТС]
Заработало!!! Всем спасибо)
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
20.04.2017, 14:09
Цитата Сообщение от MRivaz Посмотреть сообщение
И как я понял, в SQL нет возможности использовать в некоторых частях запроса значения переменных, и единственным решением является использование строки запроса.
И как вы такое поняли? тем более что и в этом вашем коде я не увидел ни толики от динамического запроса.
С таким же успехом вы могли написать
C#
1
2
3
cmd.CommandText := 
  'INSERT Матан (КС, Название, Тип, Оценка, Пропуски) VALUES ' +
    '(:KS, :NAME, :TYPE, :OCENKA, :PROPUSKI )';
присвоить параметры и выполнить запрос.
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 8
20.04.2017, 14:22  [ТС]
Таблица создается с именем, которая передается переменной @NAME. Если написать код так:
C#
1
2
3
cmd.CommandText := 
  'INSERT @NAME(КС, Название, Тип, Оценка, Пропуски) VALUES ' +
    '(:KS, :NAME, :TYPE, :OCENKA, :PROPUSKI )';
то он не будет работать.
З.Ы. Я в примере неправильный кусок кода вставил)
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
20.04.2017, 14:33
вы же не в SQL запрос генерируете, а на стороне, там бы и написали

C#
1
2
'INSERT ' + 'Матан' + '(КС, Название, Тип, Оценка, Пропуски) VALUES ' +
    '(:KS, :NAME, :TYPE, :OCENKA, :PROPUSKI )';
или переменную, а не константу, но в части имени таблицы, но не всего SQL-предложения. Хотя если пошли на создание персональной таблицы под каждую дисциплину, то вы явный клиент exec sp_executesql Успехов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2017, 14:33
Помогаю со студенческими работами здесь

Динамический запрос в oracle apex для вывода таблицы
Приветствую знатоков oracla, apexa и вообще pl sql разрабв. Прошу сразу не писать гневные комментарии я только учусь и пытаюсь разобраться....

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

Динамический запрос с выбором полей через форму
Есть БД в которо Добавлено через 16 минут Есть таблица Sales, в которой отображены данные по продажам за определенный перод. Поля...

Динамический запрос с выбором полей через форму
Возник вопрос, пока теоретический: Хочу на форме разместить несколько контролов (checkbox) из нескольких связанных таблиц. Идея такая -...

Заполнение таблицы через update
здравствуйте! у меня есть табличка device с полями name и id. я ее заполнила...и добавила столбец descr, для каждого девайса оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru