2011-11-03 22 views
5

Necesito ayuda para pasar el parámetro "tipo de tabla definida por el usuario" a sql dinámico, sp_executesql.Pasar parámetro de tabla definido por el usuario a sql dinámico, sp_executesql

Aquí está mi código de ejemplo:

DECLARE @str as nvarchar(Max) 
DECLARE @IDLIST AS ListBigintType /* this is my table type, with ItemId column (bigint)*/ 

INSERT INTO @IDLIST 

SELECT DISTINCT bigintid FROM tableWithBigInts WITH(NOLOCK) 


set @str ='select * from SomeTable where ID in (select ItemId from @IdTable) ' 

EXEC sp_executesql @str , @ParamDefs, @IdTable = @IDLIST 

Dice: Debe declarar la variable de tabla "@IdTable"

no puedo conseguir que esto funcione, y no puedo conseguir una solución con fusionan (para bigints) ya sea porque el resultado será más de 8000 caracteres.

Respuesta

7

establecer @ParamDefs intentar:

EXEC sp_executesql @str , N'@IdTable ListBigintType readonly', @IdTable = @IDLIST 

Aquí está un ejemplo completo de trabajo:

create type ListBigintType as table (ItemId bigint) 
go 
declare @t as ListBigintType 
insert @t select 6*7 

exec sp_executesql 
    N'select ItemId from @IdTable', 
    N'@IdTable ListBigintType readonly', @t 
+0

Lo siento, se me olvidó escribir que cuando estoy escribiendo la pregunta aquí. La consulta ya lo tiene. pero da el mismo error. –

+0

Agregó un ejemplo de trabajo. Verifique el nivel de compatibilidad para su base de datos, desde 'seleccionar nombre, nivel de compatibilidad de sys.databases'? Debe establecerse en 90 o superior, para SQL Server 2005+. – Andomar

+0

El ejemplo que publiqué funciona bien en mi instalación, así que estoy seguro de que puede pasar los parámetros con valores de tabla usando 'sp_executesql' – Andomar

Cuestiones relacionadas