powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / dynmic sql
23 сообщений из 23, страница 1 из 1
dynmic sql
    #39578129
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет ребята
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
ето дает меня ошибка

declare @sql varchar(1000),@col varchar(20)='Name',@TableName varchar(100)='customers'
select @sql='insert into ' + @TableName + '('+@col+')'+'values(' + rtrim(cast(@col as nchar(20))) + ')'
exec  (@sql)

Msg 207, Level 16, State 1, Line 27
Invalid column name 'Name'.



но в таблице ест такой столбец
...
Рейтинг: 0 / 0
dynmic sql
    #39578130
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пробовали смотреть, что получилось в переменной @sql? Ну, просто чтобы хотя бы поржать, я не знаю.
...
Рейтинг: 0 / 0
dynmic sql
    #39578133
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

дает меня ето
Код: sql
1.
2.
3.
print @sql

insert into customers(Name)values(Name)



ето част stored proc ктотрый я хочу сделат круд в динамически

селект уже работает

я хотел бы добавит инсерт апдейт тоже
но уже я в еррор

прочедура ето )



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create Procedure [dbo].[crud_operation]
	@TableName VarChar(100),
	@id int=null,
	@action int,@COL1 NVARCHAR(20)=null,@COL2 NVARCHAR(20)=null,@cval1 nvarchar(20)=null,@cval2 nvarchar(20)=null
AS

Declare @SQL VarChar(1000)
----simple select--
 
SELECT @SQL = case
 when (@action = 0 and @id is null) then  'SELECT * FROM ' + @TableName
 when (@action=0 and  @id is not null) then 'SELECT * FROM ' + @TableName +' '+ N'where id=' + rtrim(cast (@id as nchar(2)))
 else '' end 
print @sql
Exec ( @SQL)

exec dbo.crud_operation @TableName='customers',@action=0,@id=2

2	hbhb	mn nmnm
...
Рейтинг: 0 / 0
dynmic sql
    #39578138
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Itex2017insert into customers(Name)values(Name)И откуда, по-вашему, сервер должен взять значение Name, которое вы нарисовали в values?
...
Рейтинг: 0 / 0
dynmic sql
    #39578140
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

спасибо вам Сергей Алексеевич за внимание и дискуссии

я сам записал ето

етот вариант работает

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
alter Procedure [dbo].[crud_operation]
	@TableName VarChar(100),
	@id int=null,
	@action int,@COL1 NVARCHAR(20)=null,@COL2 NVARCHAR(20)=null,@cval1 nvarchar(20)=null,@cval2 nvarchar(20)=null
AS

Declare @SQL VarChar(1000)
----simple select--
 
SELECT @SQL = case
 when (@action = 0 and @id is null) then  'SELECT * FROM ' + @TableName
 when (@action=0 and  @id is not null) then 'SELECT * FROM ' + @TableName +' '+ N'where id=' + rtrim(cast (@id as nchar(2)))
 when (@action=1 and @COL1 is not null and @COL2 is null) then 'insert into ' + @TableName + ' ' +'('+@COL1+')' + ' ' + 'select '+ ''''+@cval1+''''
 when (@action=1 and @COL1 is not null and @COL2 is not null) then
 'insert into ' + @TableName + '('+@COL1+','+@COL2 + ')' + ' ' + 'select '+ ''''+@cval1+'''' +','+''''+@cval2+''''
 else '' end 
print @sql
Exec ( @SQL)


insert into customers(Name,Country) select 'x','az'

(1 row(s) affected)




но у меня ест еше вопрос
если етот столбец не бедет варчар например датетайм или интейджер

тогда мне нужн в прочедуре записат коллекции @col1,@col2 и тг

что то может получит етот автоматически

спасибо
...
Рейтинг: 0 / 0
dynmic sql
    #39578146
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Itex2017 но у меня ест еше вопрос
если етот столбец не бедет варчар например датетайм или интейджер

тогда мне нужн в прочедуре записат коллекции @col1,@col2 и тг
А это вы вопрос вашему архитектору задайте, который вот эту адскую хрень придумал.
...
Рейтинг: 0 / 0
dynmic sql
    #39578148
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

да ето я получаю

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME = 'customers' AND 
     COLUMN_NAME = 'Name'

DATA_TYPE
nvarchar



ето дает меня просто nvarchar

могу я динамически в етом процедуре изменит тик переменные в инсерте и апдейте?
...
Рейтинг: 0 / 0
dynmic sql
    #39578151
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не можете.
...
Рейтинг: 0 / 0
dynmic sql
    #39578188
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Itex2017,
Вот здесь концептуальная ошибка
Код: sql
1.
2.
3.
4.
5.
6.
7.
	@TableName VarChar(100),
	@id int=null,
	@action int,@COL1 NVARCHAR(20)=null,@COL2 NVARCHAR(20)=null,@cval1 nvarchar(20)=null,@cval2 nvarchar(20)=null
AS

Declare @SQL VarChar(1000)
----simple select--


А вот здесь кошерный код
Код: sql
1.
2.
3.
4.
5.
6.
7.
	@TableName NVARCHAR(MAX),
	@id int=null,
	@action int,@COL1 NVARCHAR(MAX)=null,@COL2 NVARCHAR(MAX)=null,@cval1 nNVARCHAR(MAX)=null,@cval2 NVARCHAR(MAX)=null
AS

Declare @SQL NVARCHAR(MAX)
----simple select--
...
Рейтинг: 0 / 0
dynmic sql
    #39578189
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

В третьей строке сверху заменить nNVARCHAR(MAX) на NVARCHAR(MAX).
...
Рейтинг: 0 / 0
dynmic sql
    #39578191
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPAndy_OLAP,

В третьей строке сверху заменить nNVARCHAR(MAX) на NVARCHAR(MAX).

а может и не надо, это же "кошерный код"
...
Рейтинг: 0 / 0
dynmic sql
    #39578199
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPА вот здесь кошерный код
Если уж кошерный, то так )
Код: sql
1.
	@action int,@COL1 sysname=null,@COL2 sysname=null,@cval1 NVARCHAR(MAX)=null,@cval2 NVARCHAR(MAX)=null
...
Рейтинг: 0 / 0
dynmic sql
    #39578200
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Коллега, я думаю, что Ваше руководство не переживает ни за единый шекель, потраченный на Вашу зарплату или премию. Таки здорово, что есть люди, способные улучшить любой выложенный код.
...
Рейтинг: 0 / 0
dynmic sql
    #39578218
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPptr128,

Коллега, я думаю, что Ваше руководство не переживает ни за единый шекель, потраченный на Вашу зарплату или премию. Таки здорово, что есть люди, способные улучшить любой выложенный код.

Коллега, скобка после фразы обозначает смайлик. Я просто пошутил.
Если чем-то Вас обидел при этом - приношу извинения.
...
Рейтинг: 0 / 0
dynmic sql
    #39578221
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Ой-вей, я смайлик не ставил, но в сообщении выбрал желтенький значок улыбки. Вы пошутили, я пошутил, уважаю людей с хорошим чувством юмора и Вас к ним причисляю.
Таки с наступающим, коллега! :)
...
Рейтинг: 0 / 0
dynmic sql
    #39578225
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPв сообщении выбрал желтенький значок улыбки
Совсем слепой стал (
Andy_OLAPТаки с наступающим, коллега! :)
И Вас с наступающим, коллега!
...
Рейтинг: 0 / 0
dynmic sql
    #39578257
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем ребята за вниманию за дискуссии


финадная форма етот прочедур так но как может опдейт интейджер с нварчар
я незнаю но он сделает
ето ненормално я думаю

Код: sql
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.
ALTER Procedure [dbo].[crud_operation]
	@TableName VarChar(100),
	@id int=null,
	@action int,@COL1 NVARCHAR(20)=null,@COL2 NVARCHAR(20)=null,@cval1 nvarchar(20)=null,@cval2 nvarchar(20)=null
AS

Declare @SQL VarChar(1000)
----simple select--
 
SELECT @SQL = case
 when (@action = 0 and @id is null) then  'SELECT * FROM ' + @TableName
 when (@action=0 and  @id is not null) then 'SELECT * FROM ' + @TableName +' '+ N'where id=' + rtrim(cast (@id as int))
----insert----
 when (@action=1 and @COL1 is not null and @COL2 is null) then 'insert into ' + @TableName + ' ' +'('+@COL1+')' + ' ' + 'select '+ ''''+@cval1+''''
 when (@action=1 and @COL1 is not null and @COL2 is not null) then
 'insert into ' + @TableName + '('+@COL1+','+@COL2 + ')' + ' ' + 'select '+ ''''+@cval1+'''' +','+''''+@cval2+''''
----delete----
   when(@action=2 and @id is not null) then
 'delete from ' + @TableName + ' ' + N'where id='+ rtrim(cast(@id as int))
----update ---
when (@action=3 and @id is not null and (@COL1 is not null and @COL2 is null))
   then 'update ' + @TableName + ' set ' +  @COL1 + '=' + @cval1 +' where id=' + rtrim(cast(@id as int)) 

else '' end
print @sql
Exec ( @SQL)




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
exec crud_operation @TableName='emin',@action=3,@id=1,@COL1='phone',@cval1='5'

exec crud_operation @TableName='emin',@action=3,@id=1,@COL1='phone',@cval1=5

update emin set phone=5 where id=1

(1 row(s) affected)
update emin set phone=5 where id=1

(1 row(s) affected)




ето как может работат в здес phone интейджер столбец
...
Рейтинг: 0 / 0
dynmic sql
    #39578259
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еше здес ест
Код: sql
1.
2.
3.
4.
5.
6.
[SRC PLSQL]
@COL1 NVARCHAR(20)=null,@COL2 NVARCHAR(20)=null,

и

@cval1 nvarchar(20)=null,@cval2 nvarchar(20)=null

[/SRC]

етот стобцы в любом табличе

процедур смотрит какие не нулл и очен сложно
например так

Код: sql
1.
2.
3.
4.
when (@action=1 and @COL1 is not null and @COL2 is not null)

then
 'insert into ' + @TableName + '('+@COL1+','+@COL2 + ')' + ' ' + 'select '+ ''''+@cval1+'''' +','+''''+@cval2+''''




я испозую @cval1 @cval2

можно сделат ето автоматически


какие столбцы из нот нулл тогда количества инсерт или апдейд парамет тоже так
...
Рейтинг: 0 / 0
dynmic sql
    #39578384
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ето я хотел бы получит
спасибо всем друзя
за дискуссии и советы
с праздником!!!!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare @test table (col1 nvarchar(max),col2 nvarchar(max)) 
declare @sql nvarchar(max),@tablename nvarchar(max)='nasa',@id nvarchar(max)='1',
@parm nvarchar(100)='3'
insert into @test(col1,col2)
values
('col1','00'),('col2','00'),('col3','00')
select * from @test

set @sql= 'update '  + QUOTENAME( @tablename) + NCHAR(10)+'set'+NCHAR(10)+
STUFF( (select ','+quotename(col1) +'='+ '''' + col2 +'''' + nchar(10) from @test for xml path('')),1,1,'')  
  SET @sql = @sql + N'WHERE ID =' + @parm;             
  
print @sql
exec (@sql)
...
Рейтинг: 0 / 0
dynmic sql
    #39578467
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Itex2017,

Hi, friend, where are you from? Jet Propulsion Laboratory, Pasadena?
Listen, you're making the wrong choice. Converting in "nchar(10) from @test" for one part of your dynamic code is a mistake, because you attach "where" after that.
Do always right choise.
Код: sql
1.
2.
3.
4.
@parm nvarchar(100)='3' -- okey, not bad

+ convert(nvarchar(max),nchar(10) from @test for xml path('')),1,1,''))  -- only in nvarchar(max)
  SET @sql = @sql + N'WHERE ID =' + convert(nvarchar(max),@parm); -- only in nvarchar(max)            


Thanks for your congratulations, be happy too!
...
Рейтинг: 0 / 0
dynmic sql
    #39578516
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPItex2017,

Hi, friend, where are you from? Jet Propulsion Laboratory, Pasadena?
Listen, you're making the wrong choice. Converting in "nchar(10) from @test" for one part of your dynamic code is a mistake, because you attach "where" after that.
Do always right choise.
Код: sql
1.
2.
3.
4.
@parm nvarchar(100)='3' -- okey, not bad

+ convert(nvarchar(max),nchar(10) from @test for xml path('')),1,1,''))  -- only in nvarchar(max)
  SET @sql = @sql + N'WHERE ID =' + convert(nvarchar(max),@parm); -- only in nvarchar(max)            



Thanks for your congratulations, be happy too!1, 1, '' - это из STUFF()? А где он сам-то?
...
Рейтинг: 0 / 0
dynmic sql
    #39578518
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPItex2017,

Hi, friend, where are you from? Jet Propulsion Laboratory, Pasadena?
Listen, you're making the wrong choice. Converting in "nchar(10) from @test" for one part of your dynamic code is a mistake, because you attach "where" after that.
Do always right choise.
Код: sql
1.
2.
3.
4.
@parm nvarchar(100)='3' -- okey, not bad

+ convert(nvarchar(max),nchar(10) from @test for xml path('')),1,1,''))  -- only in nvarchar(max)
  SET @sql = @sql + N'WHERE ID =' + convert(nvarchar(max),@parm); -- only in nvarchar(max)            


Thanks for your congratulations, be happy too!

Hi friend,
Do always right choise too.
...
Рейтинг: 0 / 0
dynmic sql
    #39578628
Itex2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapAndy_OLAPItex2017,

Hi, friend, where are you from? Jet Propulsion Laboratory, Pasadena?
Listen, you're making the wrong choice. Converting in "nchar(10) from @test" for one part of your dynamic code is a mistake, because you attach "where" after that.
Do always right choise.
Код: sql
1.
2.
3.
4.
@parm nvarchar(100)='3' -- okey, not bad

+ convert(nvarchar(max),nchar(10) from @test for xml path('')),1,1,''))  -- only in nvarchar(max)
  SET @sql = @sql + N'WHERE ID =' + convert(nvarchar(max),@parm); -- only in nvarchar(max)            



Thanks for your congratulations, be happy too!1, 1, '' - это из STUFF()? А где он сам-то?


Код: sql
1.
2.
3.
set @sql= 'update '  + QUOTENAME( @tablename) + NCHAR(10)+'set'+NCHAR(10)+
STUFF( (select ','+quotename(col1) +'='+ '''' + col2 +'''' + nchar(10) from @test for xml path('')),1,1,'')  
  SET @sql = @sql + N'WHERE ID =' + @parm; 





вообше прочессс очен длинный
я исполузю перед етим финкция Split string
после етого табле валуед
можно мне поделит вес скрипт сдес за дискуссию
думаю всегда ест оптималный вариант
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / dynmic sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]