Мне определили Тип Таблицы в базе данных. Это используется в качестве табличного параметра в хранимой процедуре. Я хотел бы назвать эту процедуру от другой базы данных, и для передачи параметра, я должен сослаться на этот определенный тип.
Но когда я делаю DECLARE @table dbOtherDatabase.dbo.TypeName
, это говорит мне это The type name 'dbOtherDatabase.dbo.TypeName' contains more than the maximum number of prefixes. The maximum is 1.
Как я мог сослаться на этот тип таблицы?
Cross-database user-defined types, похоже, работает только для типов на основе CLR. См. этот форум и MSDN (плюс комментарии).
Нельзя ли просто определить тип в обеих базах данных.
Редактировать
Смотрите эту статью о том, как сделать то, что вы требуете
вы можете попробовать использовать sp_executesql:
DECLARE @mylist integer_list_tbltype,
@sql nvarchar(MAX)
SELECT @sql = N'SELECT p.ProductID, p.ProductName
FROM Northwind..Products p
WHERE p.ProductID IN (SELECT n FROM @prodids)'
INSERT @mylist VALUES(9),(12),(27),(37)
EXEC sp_executesql @sql, N'@prodids integer_list_tbltype READONLY', @mylist
и если это не сработает, вам, возможно, придется создать процедуру-обертку в удаленной БД, где вы передаете строку CSV, а процедура-обертка разбивает ее и создает таблицу (теперь используя локальный тип таблицы), чтобы затем передать ее в фактическую процедуру. См. этот ответ для объяснения того, как разделить строку CVS.