2011-11-03 13 views
5

पर उपयोगकर्ता परिभाषित तालिका पैरामीटर पास करने के लिए मुझे गतिशील एसक्यूएल, sp_executesql में "उपयोगकर्ता परिभाषित तालिका प्रकार" पैरामीटर को पारित करने में सहायता चाहिए।गतिशील एसक्यूएल, sp_executesql

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 

इसे कहते हैं:

यहाँ मेरी नमूना कोड तालिका चर घोषित करना चाहिए "@IdTable"

मैं इस काम करने के लिए नहीं मिल सकता है, और सम्मिलित साथ एक समाधान नहीं मिल सकता है (bigints के लिए) या तो क्योंकि परिणाम 8000 से अधिक वर्ण होंगे।

उत्तर

7

को @ParamDefs सेट करके देखें:

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

मैं माफी चाहता हूँ, मैं लिखने के लिए कि जब मैं प्रश्न यहाँ लिख रहा हूँ भूल गया:

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

यहाँ एक पूर्ण काम कर उदाहरण है। क्वेरी में पहले से ही यह है। लेकिन यह वही त्रुटि देता है। –

+0

एक कामकाजी उदाहरण जोड़ा गया। अपने डेटाबेस के लिए compatiblity स्तर की जांच करें, 'select name, compatibility_level sys.databases' से? SQL सर्वर 2005+ के लिए इसे 90 या उच्चतर पर सेट किया जाना चाहिए। – Andomar

+0

मेरे द्वारा पोस्ट किया गया उदाहरण मेरी स्थापना पर ठीक चलाता है, इसलिए मुझे यकीन है कि आप 'sp_executesql' – Andomar