2011-11-03 3 views
5

Ho bisogno di aiuto per passare il mio parametro "tipo di tabella definito dall'utente" a sql dinamico, sp_executesql.Passare il parametro di tabella definito dall'utente a sql dinamico, sp_executesql

Ecco il mio codice di esempio:

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: Deve dichiarare la variabile di tabella "@IdTable"

non riesco a far funzionare tutto questo, e non può ottenere una soluzione con coalesce (per bigints) o perché il risultato sarà più di 8000 caratteri.

risposta

7

impostazione @ParamDefs da provare:

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

Ecco un esempio completo di lavoro:

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

mi dispiace, ho dimenticato di scrivere che quando sto scrivendo la domanda qui. La query lo ha già. ma dà lo stesso errore. –

+0

Aggiunto un esempio di lavoro. Controlla il livello di compatibilità per il tuo database, da 'select name, compatibility_level from sys.databases'? Dovrebbe essere impostato su 90 o successivo, per SQL Server 2005+. – Andomar

+0

L'esempio che ho postato va bene per la mia installazione, quindi sono sicuro che puoi passare i parametri con valori di tabella usando 'sp_executesql' – Andomar