Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача в MS SQL табличной переменной не работает / 9 сообщений из 9, страница 1 из 1
04.06.2017, 00:37
    #39465373
ElenaTomsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
Здравствуйте !

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  strSql = " DECLARE @m_table1 AS m_table; " & _
    " DECLARE @ret int; " & _
    " INSERT INTO @m_table1 (id, val) " & _
    " SELECT 1, 3 " & _
    " union all" & _
    " SELECT 2, 4 " & _
    " union all" & _
    " SELECT 3, 5 " & _
    " union all" & _
    " SELECT 4, 6 ;" & _
    " exec @ret =  p_insert @m_table1, @ret = Null "



Dim qdf As QueryDef
Set qdf = CreateTempQueryDef(strSql)
Set OpenRecordset = qdf.OpenRecordset(dbOpenForwardOnly, dbReadOnly)



Вот такой код я пытаюсь выполнить в акцесе. Он отлично отрабатывает в management studio, а вот акцесс говорит: invalid argument.
Можно ли что-то поправить? Пробовала акцесс самых разных версий, но пока выходит, что проблема возникает именно при работе с табличной переменной. Стоит ее убрать, вот этот вызов: exec @ret = p_insert @m_table1, @ret = Null и всё хорошо.

Переписать процедуру на передачу не таблицы, а параметров в виде чисел можно, но от этого как раз хотелось уйти.
...
Рейтинг: 0 / 0
04.06.2017, 09:42
    #39465416
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
Работайте с ADO.
...
Рейтинг: 0 / 0
05.06.2017, 11:19
    #39465773
NOCOUNT,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
ElenaTomsk Dim qdf As QueryDef
Set qdf = CreateTempQueryDef(strSql)
Set OpenRecordset = qdf.OpenRecordset(dbOpenForwardOnly, dbReadOnly)



Вот такой код я пытаюсь выполнить в акцесе. Он отлично отрабатывает в management studio, а вот акцесс говорит: invalid argument.
Можно ли что-то поправить? Пробовала акцесс самых разных версий, но пока выходит, что проблема возникает именно при работе с табличной переменной. Стоит ее убрать, вот этот вызов: exec @ret = p_insert @m_table1, @ret = Null и всё хорошо.

Переписать процедуру на передачу не таблицы, а параметров в виде чисел можно, но от этого как раз хотелось уйти.Что это за функция CreateTempQueryDef?

Вот так, нормально отрабатывает
И обязательно добавь выделенное
Код: vbnet
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.
    Dim strSQL As String
    Dim qdf As DAO.QueryDef
    Dim rs As DAO.Recordset
    
    strSQL = "SET NOCOUNT ON;" & _
      " DECLARE @m_table1 AS m_table; " & _
      " DECLARE @ret int; " & _
      " INSERT INTO @m_table1 (id, val) " & _
      " SELECT 1, 3 " & _
      " union all" & _
      " SELECT 2, 4 " & _
      " union all" & _
      " SELECT 3, 5 " & _
      " union all" & _
      " SELECT 4, 6 ;" & _
      " exec @ret =  p_insert @m_table1, @ret = Null "

    Set qdf = CurrentDb.CreateQueryDef("")
    qdf.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=MyServer;UID=sa;PWD=MyPass;DATABASE=tempdb;"
    qdf.SQL = strSQL
    qdf.ReturnsRecords = True
    
    Set rs = qdf.OpenRecordset(dbOpenForwardOnly, dbReadOnly)
    Do While Not rs.EOF
        Debug.Print rs.Fields("val")
        rs.MoveNext
    Loop
...
Рейтинг: 0 / 0
07.06.2017, 09:29
    #39467518
ElenaTomsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
NOCOUNT, Здравствуйте !


А какая версия сервера и акцесса ? У меня этот код возвращает ошибку тоже.
...
Рейтинг: 0 / 0
07.06.2017, 11:34
    #39467669
NOCOUNT,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
ElenaTomskNOCOUNT, Здравствуйте !


А какая версия сервера и акцесса ? У меня этот код возвращает ошибку тоже.
Ту же ошибку ?

когда отвечал, проверял на MS SQL 2008 (или 2008R2) и A2003 (32б)
сейчас проверил на MS SQL 2014 (64б) и A2010 (32б) - тоже всё ОК (только драйвер изменил на SQL Server Native Client 11.0 )

Может уровень совместимости БД, в которой ты пробуешь выполнить этот код, ниже 100 ?
Что возвращает этот запрос ?
Код: sql
1.
2.
SELECT compatibility_level  
FROM sys.databases WHERE name = 'mydb'



Навсякий, код типа и ХП, по которым проверял
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
use [tempdb]
go

-- Create the data type
CREATE TYPE m_table AS TABLE 
(
	id int, 
	val int, 
    PRIMARY KEY (id)
)
GO

create proc p_insert 
		@m_table1 m_table readonly
		,@ret int = Null
as 
select * from @m_table1
go
...
Рейтинг: 0 / 0
21.06.2017, 06:04
    #39475161
ElenaTomsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
NOCOUNT,,

Выдает ошибку: Запрещено разрешение Execute на m_table. Что как минимум странно, потому что тип объявлен как User Defined table, а таблицам вроде разрешение Execute никогда не нужно было. Причем код один в один как у вас, но где-то что-то недокручено. :(
...
Рейтинг: 0 / 0
21.06.2017, 06:41
    #39475165
ElenaTomsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
В общем, непонятно ничего :( Права на саму процедуру есть, даны to public. Одноко стоило добавить пользователя в группу sa, как все заработало. Но это не дело совершенно, а как решить без этогонеястно :(
...
Рейтинг: 0 / 0
21.06.2017, 11:21
    #39475307
NOCOUNT,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
...
Рейтинг: 0 / 0
21.06.2017, 12:10
    #39475363
ElenaTomsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в MS SQL табличной переменной не работает
NOCOUNT,,

Спасибо, заработало !
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача в MS SQL табличной переменной не работает / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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