Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / dynmic sql / 23 сообщений из 23, страница 1 из 1
30.12.2017, 00:36
    #39578129
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
привет ребята
Код: 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
30.12.2017, 00:42
    #39578130
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Вы пробовали смотреть, что получилось в переменной @sql? Ну, просто чтобы хотя бы поржать, я не знаю.
...
Рейтинг: 0 / 0
30.12.2017, 01:10
    #39578133
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Гавриленко Сергей Алексеевич,

дает меня ето
Код: 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
30.12.2017, 01:32
    #39578138
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Itex2017insert into customers(Name)values(Name)И откуда, по-вашему, сервер должен взять значение Name, которое вы нарисовали в values?
...
Рейтинг: 0 / 0
30.12.2017, 01:38
    #39578140
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Гавриленко Сергей Алексеевич,

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

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

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

Код: 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
30.12.2017, 01:58
    #39578146
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Itex2017 но у меня ест еше вопрос
если етот столбец не бедет варчар например датетайм или интейджер

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

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

Код: 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
30.12.2017, 02:12
    #39578151
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Не можете.
...
Рейтинг: 0 / 0
30.12.2017, 11:39
    #39578188
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
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
30.12.2017, 11:40
    #39578189
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
Andy_OLAP,

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

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

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

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

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

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

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


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

Код: 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
30.12.2017, 16:18
    #39578259
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
И еше здес ест
Код: 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
31.12.2017, 15:31
    #39578384
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
ето я хотел бы получит
спасибо всем друзя
за дискуссии и советы
с праздником!!!!

Код: 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
31.12.2017, 21:59
    #39578467
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
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
01.01.2018, 10:48
    #39578516
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
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
01.01.2018, 11:16
    #39578518
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
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
02.01.2018, 01:35
    #39578628
Itex2017
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dynmic sql
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / dynmic sql / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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