Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Собственно, скритп делает обновление данных, но только при указании id строки, требуется что бы скрипт обновлял все строки в таблице. Идеальный вариант это процедура с параметром названия таблицы. Спасибо.

BEGIN TRAN
USE Test_Alex
DECLARE
@bindata varbinary (8000),
@wkt varchar (1000),sql
@GUID uniqueidentifier
SET @GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6'
SET @bindata = (SELECT geometry from [Test_Alex].[dbo].[Test::L1]
WHERE GUID = @GUID)
exec [master].dbo.xp_gb_get_wkt_from_binary @bindata,@wkt output

CREATE TABLE Test_Alex.#Temp(wkt varchar(1000))
insert into #TEMP (wkt) values(@wkt)
SELECT * FROM #Temp

GO
23 июл 13, 13:55    [14604086]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
[quot bamper78]Собственно, скритп делает обновление данных, но только при указании id строки, требуется что бы скрипт обновлял все строки в таблице. Идеальный вариант это процедура с параметром названия таблицы. Спасибо.

BEGIN TRAN
USE Test_Alex
DECLARE
@bindata varbinary (8000),
@wkt varchar (1000),sql
@GUID uniqueidentifier
SET @GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6'
SET @bindata = (SELECT geometry from [Test_Alex].[dbo].[Test::L1]
WHERE GUID = @GUID)
exec [master].dbo.xp_gb_get_wkt_from_binary @bindata,@wkt output

CREATE TABLE Test_Alex.#Temp(wkt varchar(1000))
insert into #TEMP (wkt) values(@wkt)
SELECT * FROM #Temp

GO

DECLARE
@wktN varchar(8000),
@wkb varbinary(8000),
@geom_type tinyint,
@left float,
@top float,
@right float,
@bottom float
SET @wktN = (SELECT * FROM #Temp) --'POLYGON ((-27008 13312,7680 13312,7680 -5248,-27008 -5248))'
EXEC [master].dbo.xp_gb_get_binary_from_wktext @wktN,@wkb OUTPUT, @geom_type OUTPUT,@left output, @top output, @right output, @bottom output

IF not exists (SELECT * FROM [Test_Alex].[dbo].[Test::L1]
WHERE [Left] = @left AND [Right] = @right AND [Top] = @top AND [Bottom] = @bottom
AND GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6')

UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
WHERE GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6'

ELSE
PRINT 'Данные корректны'
SELECT * FROM [Test_Alex].[dbo].[Test::L1]
DROP TABLE #Temp
COMMIT TRAN
23 июл 13, 14:04    [14604190]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Знатоки, дайте совет.
23 июл 13, 14:35    [14604440]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
qwerty112
Guest
bamper78
Знатоки, дайте совет.

ну "держи" первый
23 июл 13, 14:39    [14604465]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
bamper78
Знатоки, дайте совет.

Без проблем.
Совет: оформите свой вопрос в соответствии с рекомендациями: https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume
23 июл 13, 14:40    [14604474]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
qwerty112
Guest
bamper78
Собственно, скритп делает обновление данных, но только при указании id строки, требуется что бы скрипт обновлял все строки в таблице. Идеальный вариант это процедура с параметром названия таблицы. Спасибо.

+
BEGIN TRAN
USE Test_Alex
DECLARE 
@bindata varbinary (8000),
@wkt varchar (1000),sql
@GUID uniqueidentifier
SET @GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6'
SET @bindata = (SELECT geometry from [Test_Alex].[dbo].[Test::L1]
                WHERE  GUID = @GUID)
exec [master].dbo.xp_gb_get_wkt_from_binary @bindata,@wkt output

CREATE TABLE Test_Alex.#Temp(wkt varchar(1000))
insert into #TEMP (wkt) values(@wkt)
SELECT * FROM #Temp

GO

DECLARE 
@wktN      varchar(8000),
@wkb       varbinary(8000),
@geom_type tinyint,
@left      float,
@top       float,
@right     float,
@bottom    float
SET @wktN = (SELECT * FROM #Temp) --'POLYGON ((-27008 13312,7680 13312,7680 -5248,-27008 -5248))'
EXEC [master].dbo.xp_gb_get_binary_from_wktext @wktN,@wkb OUTPUT, @geom_type OUTPUT,@left output, @top output, @right output, @bottom output 

IF not exists (SELECT * FROM  [Test_Alex].[dbo].[Test::L1]
               WHERE [Left] = @left AND [Right] = @right AND [Top] = @top AND [Bottom] = @bottom  
			   AND GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6')

UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
                                    WHERE GUID = 'A02A1261-ED2E-43AB-8B94-F8FAEA9309C6' 

ELSE 
PRINT 'Данные корректны'
SELECT * FROM [Test_Alex].[dbo].[Test::L1]
DROP TABLE #Temp
COMMIT  TRAN

а в чём ваще вопрос ?
синтаксис открытия курсора нужен ?
DECLARE CURSOR (Transact-SQL)
23 июл 13, 14:45    [14604514]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
я с курсорами раньше не работал, поэтому прошу помощи или пример, как эго организовать
23 июл 13, 15:27    [14604810]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Друзья, курсор написал, но в апдейте ошибка - Типы данных varbinary и image в операторе equal to несовместимы
Как это обойти ? Спасибо
BEGIN TRAN
USE [Test_Alex]
DECLARE 
@bindata varbinary (8000),
@wkt varchar (1000)
   
CREATE TABLE Test_Alex.#Temp (wkt varchar(1000))

DECLARE MyCursor CURSOR 
   FOR
     SELECT [Geometry] FROM [dbo].[Test::L1]

OPEN MyCursor
BEGIN
 FETCH NEXT FROM MyCursor INTO @bindata
 WHILE (@@FETCH_STATUS  <> -1)  
  BEGIN
   
   exec [master].dbo.xp_gb_get_wkt_from_binary @bindata,@wkt output
   
   insert into #TEMP (wkt) values(@wkt)
  FETCH NEXT FROM MyCursor INTO @bindata
  END
END

CLOSE MyCursor
DEALLOCATE MyCursor

SELECT * FROM #Temp

GO

DECLARE 
@wktN      varchar(8000),
@wkb       varbinary(8000),
@geom_type tinyint,
@left      float,
@top       float,
@right     float,
@bottom    float

CREATE TABLE Test_Alex.#Temp_W ([Left] float,[Right]float,[Top]float,[Bottom]float,wkb varbinary (max) )

DECLARE MyCursor CURSOR 
   FOR
     SELECT wkt FROM #Temp
OPEN MyCursor
BEGIN
 FETCH NEXT FROM MyCursor INTO @wktN
 WHILE (@@FETCH_STATUS  <> -1)  
  BEGIN
  EXEC [master].dbo.xp_gb_get_binary_from_wktext @wktN,@wkb OUTPUT, @geom_type OUTPUT,@left output, @top output, @right output, @bottom output 

  UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  WHERE @wkb = (SELECT [Geometry]FROM [Test_Alex].[dbo].[Test::L1])

 -- SELECT  @wktn
  --insert into #Temp_W ([Left],[Right],[Top],[Bottom],wkb) values(@left,@right,@top,@bottom,@wkb)
  FETCH NEXT FROM MyCursor INTO @wktN
  END
END

CLOSE MyCursor
DEALLOCATE MyCursor

SELECT * FROM #Temp_W

--UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = (SELECT [Left] FROM #Temp_W WHERE [Test_Alex].[dbo].[Test::L1].[Geometry] = #.TEMP_W.wkb),
--                                        [Right] = (SELECT [Right] FROM #Temp_W WHERE [Test_Alex].[dbo].[Test::L1].[Geometry] = #.TEMP_W.wkb),
--										[Top] = (SELECT [Top] FROM #Temp_W WHERE [Test_Alex].[dbo].[Test::L1].[Geometry] = #.TEMP_W.wkb),
--										[Bottom] = (SELECT [Bottom] FROM #Temp_W WHERE [Test_Alex].[dbo].[Test::L1].[Geometry] = #.TEMP_W.wkb)

DROP TABLE #Temp
DROP TABLE #Temp_W

ROLLBACK TRAN
23 июл 13, 18:25    [14606117]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
bamper78
Друзья, курсор написал, но в апдейте ошибка - Типы данных varbinary и image в операторе equal to несовместимы
Как это обойти ?
Не совмещать типы данных varbinary и image в операторе equal to.

код процедуры то у вас есть, она не зашифрована? Смотрите, к каким таблицам она подключается и какие данные вытягивает - наверняка где-то тип данных image.
23 июл 13, 18:28    [14606134]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
 UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  WHERE @wkb = (SELECT [Geometry]FROM [Test_Alex].[dbo].[Test::L1])


(SELECT [Geometry]FROM [Test_Alex].[dbo].[Test::L1])
Данное поле имеет тип Image? только по этому плю могу сделять привязку для апдейта. Есть ли решение ?
23 июл 13, 18:46    [14606228]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
bamper78,
UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  WHERE @wkb = (SELECT cast([Geometry] as varbinary(max)) FROM [Test_Alex].[dbo].[Test::L1])
23 июл 13, 19:01    [14606316]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
какой-то UPDATE ... жутковатый...
может так?
update L
  set [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  from [Test_Alex].[dbo].[Test::L1] L
  where L.[Geometry]=@wkb
Совместимость типов [Geometry] и @wkb - хз как, может через почту CONVERT ?
23 июл 13, 19:06    [14606333]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
по сути написано было: если хоть одна запись совпадет с @wkb - проапдейтить всю таблицу
23 июл 13, 19:08    [14606346]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
BEGIN TRAN
USE [Test_Alex]

DECLARE @bindata VARBINARY(8000), @r_left FLOAT, @r_top FLOAT, @r_right FLOAT, @r_bottom FLOAT
DECLARE @wkt VARCHAR(1000)
DECLARE @wkb VARBINARY(8000), @geom_type TINYINT, @left FLOAT, @top FLOAT, @right FLOAT, @bottom FLOAT

DECLARE MyCursor CURSOR 
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM [dbo].[Test::L1]
   FOR UPDATE OF [Left], [Right], [Top], [Bottom]

OPEN MyCursor
WHILE(1=1)BEGIN
   FETCH NEXT FROM MyCursor INTO @bindata, @r_left, @r_top, @r_right, @r_bottom
IF @@FETCH_STATUS != 0 BREAK;
   EXEC [master].dbo.xp_gb_get_wkt_from_binary 
      @bindata, 
      @wkt OUTPUT
   EXEC [master].dbo.xp_gb_get_binary_from_wktext 
      @wkt, 
      @wkb OUTPUT, @geom_type OUTPUT, @left OUTPUT, @top OUTPUT, @right OUTPUT, @bottom OUTPUT
   IF @left!=@r_left OR @top!=@r_top OR @right!=@r_right OR @bottom!=@r_bottom 
   BEGIN
      UPDATE [Test_Alex].[dbo].[Test::L1]
         SET [Left]=@left, [Right]=@right, [Top]=@top, [Bottom]=@bottom
         WHERE CURRENT OF MyCursor
   END
END
CLOSE MyCursor
DEALLOCATE MyCursor

ROLLBACK TRAN
23 июл 13, 19:49    [14606475]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Cygapb-007
BEGIN TRAN
USE [Test_Alex]

DECLARE @bindata VARBINARY(8000), @r_left FLOAT, @r_top FLOAT, @r_right FLOAT, @r_bottom FLOAT
DECLARE @wkt VARCHAR(1000)
DECLARE @wkb VARBINARY(8000), @geom_type TINYINT, @left FLOAT, @top FLOAT, @right FLOAT, @bottom FLOAT

DECLARE MyCursor CURSOR 
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM [dbo].[Test::L1]
   FOR UPDATE OF [Left], [Right], [Top], [Bottom]

OPEN MyCursor
WHILE(1=1)BEGIN
   FETCH NEXT FROM MyCursor INTO @bindata, @r_left, @r_top, @r_right, @r_bottom
IF @@FETCH_STATUS != 0 BREAK;
   EXEC [master].dbo.xp_gb_get_wkt_from_binary 
      @bindata, 
      @wkt OUTPUT
   EXEC [master].dbo.xp_gb_get_binary_from_wktext 
      @wkt, 
      @wkb OUTPUT, @geom_type OUTPUT, @left OUTPUT, @top OUTPUT, @right OUTPUT, @bottom OUTPUT
   IF @left!=@r_left OR @top!=@r_top OR @right!=@r_right OR @bottom!=@r_bottom 
   BEGIN
      UPDATE [Test_Alex].[dbo].[Test::L1]
         SET [Left]=@left, [Right]=@right, [Top]=@top, [Bottom]=@bottom
         WHERE CURRENT OF MyCursor
   END
END
CLOSE MyCursor
DEALLOCATE MyCursor

ROLLBACK TRAN
Спасибо большое, то что надо. И элегантнее чем мое))))
24 июл 13, 10:46    [14608816]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Cygapb-007,

Проконсультируйте пожалуйста.
Почему в моем запросе я не могу использовать данную запись
  UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  WHERE CURRENT OF MyCursor
24 июл 13, 11:06    [14608929]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Странно...
а что пишет?
24 июл 13, 11:13    [14608968]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Cygapb-007,

BEGIN TRAN
USE [Test_Alex]
DECLARE 
@bindata varbinary (8000),
@wkt varchar (1000)
   
CREATE TABLE Test_Alex.#Temp (wkt varchar(1000))

DECLARE MyCursor CURSOR 
   FOR
     SELECT [Geometry] FROM [dbo].[Test::L1]

OPEN MyCursor
BEGIN
 FETCH NEXT FROM MyCursor INTO @bindata
 WHILE (@@FETCH_STATUS  <> -1)  
  BEGIN
   
   exec [master].dbo.xp_gb_get_wkt_from_binary @bindata,@wkt output
   
   insert into #TEMP (wkt) values(@wkt)
  FETCH NEXT FROM MyCursor INTO @bindata
  END
END

CLOSE MyCursor
DEALLOCATE MyCursor

SELECT * FROM #Temp

GO

DECLARE 
@wktN      varchar(8000),
@wkb       varbinary(8000),
@geom_type tinyint,
@left      float,
@top       float,
@right     float,
@bottom    float

DECLARE MyCursor CURSOR 
   FOR SELECT wkt FROM #Temp
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM [dbo].[Test::L1]

OPEN MyCursor
BEGIN
 FETCH NEXT FROM MyCursor INTO @wktN
 WHILE (@@FETCH_STATUS  <> -1)  
  BEGIN
  EXEC [master].dbo.xp_gb_get_binary_from_wktext @wktN,@wkb OUTPUT, @geom_type OUTPUT,@left output, @top output, @right output, @bottom output 

  UPDATE [Test_Alex].[dbo].[Test::L1] SET [Left] = @left, [Right]=@right, [Top]=@top,[Bottom]=@bottom
  WHERE CURRENT OF MyCursor

  FETCH NEXT FROM MyCursor INTO @wktN
  END
END

CLOSE MyCursor
DEALLOCATE MyCursor

SELECT * FROM [dbo].[Test::L1]

DROP TABLE #Temp

ROLLBACK TRAN


Неправильный синтаксис около ключевого слова "SELECT". Я неверно указываю таблицу курсору, но как ее указать, я так понимаю что можно только один источник указвать.
  FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM [dbo].[Test::L1]
24 июл 13, 11:42    [14609189]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
а просто использовать предложенный курсор без отсебятины - религия не позволяет??
24 июл 13, 11:48    [14609234]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
bamper78,

по-Вашему, что FOR SELECT, что FOR UPDATE - всё равно?
24 июл 13, 11:54    [14609280]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Cygapb-007,

Крнечно позволяет, просто хотел свое детище ))) реализовать. Спасибо еще раз.

Теперь хочу, данный скрипт сделать в ХП с параметром по имени таблицы.
Подскажите как правильно написать, вот что я пока написал
CREATE PROCEDURE left_Right_Top_Bottom  @TableName varchar (100)
AS
BEGIN 

DECLARE @Table varchar (100)
SET @Table = ???
EXECUTE(@Table)

DECLARE @bindata VARBINARY(8000), @r_left FLOAT, @r_top FLOAT, @r_right FLOAT, @r_bottom FLOAT
DECLARE @wkt VARCHAR(1000)
DECLARE @wkb VARBINARY(8000), @geom_type TINYINT, @left FLOAT, @top FLOAT, @right FLOAT, @bottom FLOAT

DECLARE MyCursor CURSOR 
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM @Table
   FOR UPDATE OF [Left], [Right], [Top], [Bottom]

OPEN MyCursor
WHILE(1=1)BEGIN
   FETCH NEXT FROM MyCursor INTO @bindata, @r_left, @r_top, @r_right, @r_bottom
IF @@FETCH_STATUS != 0 BREAK;
   EXEC [master].dbo.xp_gb_get_wkt_from_binary 
      @bindata, 
      @wkt OUTPUT
   EXEC [master].dbo.xp_gb_get_binary_from_wktext 
      @wkt, 
      @wkb OUTPUT, @geom_type OUTPUT, @left OUTPUT, @top OUTPUT, @right OUTPUT, @bottom OUTPUT
   IF @left!=@r_left OR @top!=@r_top OR @right!=@r_right OR @bottom!=@r_bottom 
   BEGIN
      UPDATE @TableName
         SET [Left]=@left, [Right]=@right, [Top]=@top, [Bottom]=@bottom
         WHERE CURRENT OF MyCursor
   END
END
CLOSE MyCursor
DEALLOCATE MyCursor
--SELECT * FROM [dbo].[Test::L1]
END
24 июл 13, 12:10    [14609423]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
параметр имя-таблицы - не подскажу. Наверное, надо использовать
DECLARE @MyCursor CUROR;
SET @MyCursor=...

но я так не делал - советовать не буду...
24 июл 13, 12:25    [14609575]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
+ Код
bamper78
Cygapb-007,

Крнечно позволяет, просто хотел свое детище ))) реализовать. Спасибо еще раз.

Теперь хочу, данный скрипт сделать в ХП с параметром по имени таблицы.
Подскажите как правильно написать, вот что я пока написал
CREATE PROCEDURE left_Right_Top_Bottom  @TableName varchar (100)
AS
BEGIN 

DECLARE @Table varchar (100)
SET @Table = ???
EXECUTE(@Table)

DECLARE @bindata VARBINARY(8000), @r_left FLOAT, @r_top FLOAT, @r_right FLOAT, @r_bottom FLOAT
DECLARE @wkt VARCHAR(1000)
DECLARE @wkb VARBINARY(8000), @geom_type TINYINT, @left FLOAT, @top FLOAT, @right FLOAT, @bottom FLOAT

DECLARE MyCursor CURSOR 
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM @Table
   FOR UPDATE OF [Left], [Right], [Top], [Bottom]

OPEN MyCursor
WHILE(1=1)BEGIN
   FETCH NEXT FROM MyCursor INTO @bindata, @r_left, @r_top, @r_right, @r_bottom
IF @@FETCH_STATUS != 0 BREAK;
   EXEC [master].dbo.xp_gb_get_wkt_from_binary 
      @bindata, 
      @wkt OUTPUT
   EXEC [master].dbo.xp_gb_get_binary_from_wktext 
      @wkt, 
      @wkb OUTPUT, @geom_type OUTPUT, @left OUTPUT, @top OUTPUT, @right OUTPUT, @bottom OUTPUT
   IF @left!=@r_left OR @top!=@r_top OR @right!=@r_right OR @bottom!=@r_bottom 
   BEGIN
      UPDATE @TableName
         SET [Left]=@left, [Right]=@right, [Top]=@top, [Bottom]=@bottom
         WHERE CURRENT OF MyCursor
   END
END
CLOSE MyCursor
DEALLOCATE MyCursor
--SELECT * FROM [dbo].[Test::L1]
END

DSQL
тынц
Не ленитесь читать ТОП 10 вопросов.
24 июл 13, 12:40    [14609700]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
bamper78,
но ведь в тынце же есть даже конкретный пример:
USE pubs
declare @cur cursor
exec sp_executesql N'set @curvar= cursor local for select top 10 au_id, au_lname, au_fname from authors open @curvar' , 
N'@curvar cursor output ', @curvar=@cur output

FETCH NEXT FROM @cur
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM @cur
END
24 июл 13, 13:48    [14610242]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании курсора  [new]
bamper78
Member

Откуда:
Сообщений: 114
Cygapb-007,

не выходит каменный цветок (((((
не пойму по данному примеру как таблицу в параметр хп змписать.
Создал переменную таблицу, записал в нее сожержимое существующей. что дальше не соображу

CREATE PROCEDURE left_Right_Top_Bottom @TABLE varchar(100)
AS
BEGIN 

DECLARE @TAB TABLE([Left] float,[Right] float,[Top] float,[Bottom] float,[Geometry] image)
INSERT @TAB SELECT [Left],[Right],[Top],[Bottom],[Geometry] FROM [dbo].[Test::L1]


--SELECT * FROM @TAB

DECLARE @bindata VARBINARY(8000), @r_left FLOAT, @r_top FLOAT, @r_right FLOAT, @r_bottom FLOAT
DECLARE @wkt VARCHAR(1000)
DECLARE @wkb VARBINARY(8000), @geom_type TINYINT, @left FLOAT, @top FLOAT, @right FLOAT, @bottom FLOAT

DECLARE MyCursor CURSOR 
   FOR SELECT [Geometry], [Left], [Right], [Top], [Bottom] FROM @TAB
   FOR UPDATE OF [Left], [Right], [Top], [Bottom]
24 июл 13, 16:24    [14611852]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить