Мне нужен SQL гуру, это сводит меня с ума ... Я получаю ошибку при выполнении динамического c SQL с пользовательским типом таблицы:
Ошибка: Тип операнда cla sh: VariableTableType несовместим с VariableTableType
Проблема: Кажется, в действительности не объявляется VariableTableType в базе данных [Database1], даже если Use [Database1] находится прямо над ним. Функция XT должна работать в базе данных [Database1], чтобы она работала.
Если я запускаю exe c с именем dbname, она работает, например: exe c database1.dbo.sp_execute sql @cmdTest - но у меня есть много клиентских баз данных, которые имеют одинаковую структуру базы данных (разные данные), где мне приходится передавать имя клиентской базы данных, поэтому я не могу жестко закодировать его таким образом. Если я сделаю @ dbname = 'MainDatabase', он запустится - просто не будет работать с нужной базой данных.
[MainDatabase] Содержит основной хранимый pro c, который имеет динамику c SQL: @ dbname = 'Database1'
DECLARE @cmdTEST NVARCHAR(MAX)=N'USE '+@dbname +'
DECLARE @t as dbo.VariableTableType
INSERT @t
SELECT VariableName,[Value],InstanceID FROM #tVarTble
SELECT dbo.XT(''Test string'',7153,45,@t)RtnValue
'
exec sp_executesql @cmdTEST
Также попытался передать VariableTableType и поместить объявление за пределы Dynami c sql. --exe c sp_execute sql @ cmdTEST, N '@ t VariableTableType READONLY' ,t=@t
[База данных1] (эта функция также существует в [MainDatabase]
ALTER FUNCTION [dbo].[XT]
(
@text nvarchar(max),
@instanceID INT,
@storeID INT,
@vt dbo.VariableTableType READONLY
)
RETURNS nvarchar(max)
AS BEGIN
… code here
RETURN @return
END
VariableTableType существует в [MainDatabase] и [Database1]
CREATE TYPE [dbo].[VariableTableType] AS TABLE(
[VariableName] [NVARCHAR](50) NULL,
[Value] [NVARCHAR](50) NULL,
[InstanceID] [INT] NULL
)