powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача в MS SQL табличной переменной не работает
9 сообщений из 9, страница 1 из 1
Передача в MS SQL табличной переменной не работает
    #39465373
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте !

Код: 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
Передача в MS SQL табличной переменной не работает
    #39465416
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работайте с ADO.
...
Рейтинг: 0 / 0
Передача в MS SQL табличной переменной не работает
    #39465773
NOCOUNT,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Передача в MS SQL табличной переменной не работает
    #39467518
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NOCOUNT, Здравствуйте !


А какая версия сервера и акцесса ? У меня этот код возвращает ошибку тоже.
...
Рейтинг: 0 / 0
Передача в MS SQL табличной переменной не работает
    #39467669
NOCOUNT,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Передача в MS SQL табличной переменной не работает
    #39475161
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NOCOUNT,,

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

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


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