दिलचस्प पोस्ट
window.getSelection () मुझे चयनित पाठ देता है, लेकिन मैं HTML चाहता हूँ जावा में एक मान को निकालने के लिए नियमित अभिव्यक्ति का उपयोग करना फ़ाइल बनाने के लिए एजेक्स के माध्यम से ब्लाको पास करें जावा # के बराबर में सी # एंड्रॉइड में जेडीबीसी कनेक्शन किसी को स्थगित करने की आवश्यकता कब होगी? जावास्क्रिप्ट में एक परिभाषित चर की जांच कैसे करें सी # के साथ जावास्क्रिप्ट द्वारा उत्पन्न स्क्रैपिंग वेबपेज मैं HTML5 / जावास्क्रिप्ट का उपयोग कर कनेक्शन प्रकार (वाईफाई / लैन / WWAN) कैसे देखूं? डीबी के सभी तालिकाओं, पंक्तियों और स्तंभों में स्ट्रिंग खोजें जावास्क्रिप्ट में उपयोगकर्ता इनपुट से एक दिनांक ऑब्जेक्ट में एक बार पार्स करने का सबसे अच्छा तरीका क्या है? Pygame में हर कुछ सेकंड एक ऑब्जेक्ट को ले जाएँ समूहीकृत समूहीकृत पंक्तियां पायथन: जांचें कि क्या स्ट्रिंग एक इंट का प्रतिनिधित्व करती है, बिना कोशिश / सिवाय इस्तेमाल किए? TableCellRenderer और कैसे JTable.repaint () का उपयोग किए बिना सेल पृष्ठभूमि को रीफ़्रेश करना

डायनामिक SQL कथन में तालिका चर का उपयोग कैसे करें?

मेरी संग्रहीत कार्यविधि में मैंने अपनी प्रक्रिया के शीर्ष पर दो तालिका चर की घोषणा की अब मैं एक डायनामिक एसक्यूएल स्टेटमेंट के भीतर उस टेबल वैरिएबल का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे उस त्रुटि को उस प्रक्रिया के निष्पादन के समय मिलता है। मैं SQL सर्वर 2008 का उपयोग कर रहा हूँ

मेरी क्वेरी इस तरह दिखती है,

set @col_name = 'Assoc_Item_' + Convert(nvarchar(2), @curr_row1); set @sqlstat = 'update @RelPro set ' + @col_name + ' = (Select relsku From @TSku Where tid = ' + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' + Convert(nvarchar(2), @curr_row); Exec(@sqlstat); 

और मुझे निम्न त्रुटियां मिलती हैं,

तालिका चर "@आरएलआरओ" को घोषित करना चाहिए तालिका चर "@ एसटीकु" घोषित करना चाहिए

मैंने मेज को गतिशील क्वेरी के स्ट्रिंग ब्लॉक के बाहर ले जाने की कोशिश की लेकिन कोई फायदा नहीं हुआ।

Solutions Collecting From Web of "डायनामिक SQL कथन में तालिका चर का उपयोग कैसे करें?"

आपके एक्सईसी एक अलग संदर्भ में कार्यान्वित करता है, इसलिए यह आपके मूल संदर्भ में घोषित किसी भी वेरिएबल्स से अवगत नहीं है। नीचे एक सरल डेमो में दिखाए गए अनुसार तालिका चर के बजाय आप अस्थायी तालिका का उपयोग करने में सक्षम होना चाहिए।

 create table #t (id int) declare @value nchar(1) set @value = N'1' declare @sql nvarchar(max) set @sql = N'insert into #t (id) values (' + @value + N')' exec (@sql) select * from #t drop table #t 

एसक्यूएल सर्वर 2008+ पर तालिका वैल्यू पैरामीटर को प्रयोग करने के लिए संभव है जब तक कि तालिका डायनेमिक एसक्यूएल कथन में पास करने के लिए आपको तालिका में मानों को अपडेट करने की आवश्यकता न हो।

इसलिए आपके द्वारा पोस्ट किए गए कोड से आप @TSku लिए इस दृष्टिकोण का उपयोग कर सकते हैं लेकिन @RelPro लिए नहीं

नीचे उदाहरण वाक्यविन्यास

 CREATE TYPE MyTable AS TABLE ( Foo int, Bar int ); GO DECLARE @T AS MyTable; INSERT INTO @T VALUES (1,2), (2,3) SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T EXEC sp_executesql N'SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T', N'@T MyTable READONLY', @T=@T 

physloc स्तंभ केवल प्रदर्शित करने के लिए शामिल है कि बच्चे के दायरे में संदर्भित तालिका चर निश्चित रूप से एक प्रति के बजाय बाहरी दायरे के समान है।

आपको गतिशील SQL का उपयोग करने की आवश्यकता नहीं है

 update R set Assoc_Item_1 = CASE WHEN @curr_row = 1 THEN foo.relsku ELSE Assoc_Item_1 END, Assoc_Item_2 = CASE WHEN @curr_row = 2 THEN foo.relsku ELSE Assoc_Item_2 END, Assoc_Item_3 = CASE WHEN @curr_row = 3 THEN foo.relsku ELSE Assoc_Item_3 END, Assoc_Item_4 = CASE WHEN @curr_row = 4 THEN foo.relsku ELSE Assoc_Item_4 END, Assoc_Item_5 = CASE WHEN @curr_row = 5 THEN foo.relsku ELSE Assoc_Item_5 END, ... from (Select relsku From @TSku Where tid = @curr_row1) foo CROSS JOIN @RelPro R Where R.RowID = @curr_row; 

आप ऐसा नहीं कर सकते क्योंकि तालिका चर का दायरा से बाहर है

आपको डायनामिक एसक्यूएल स्टेटमेंट के अंदर तालिका वैरिएबल को घोषित करना होगा या अस्थायी टेबल बनाना होगा।

मुझे सुझाव है कि आप गतिशील एसक्यूएल पर इस उत्कृष्ट लेख को पढ़ लेंगे।

http://www.sommarskog.se/dynamic_sql.html

खैर, मैंने जिस तरह से सोचा और उन लोगों के साथ साझा करने के लिए सोचा था जो एक ही समस्या में चल सकते हैं

मुझे जो समस्या आ रही थी,

मैं एक डायनामिक SQL कथन निष्पादित करने की कोशिश कर रहा था जो मैंने मेरी संग्रहीत कार्यविधि के शीर्ष पर घोषित दो अस्थायी तालिकाओं का उपयोग किया था, लेकिन क्योंकि उस गतिशील एसक्यूएल स्टेटमेंट ने एक नया क्षेत्र बनाया, मैं अस्थायी तालिकाओं का उपयोग नहीं कर सका।

उपाय:

मैंने उन्हें केवल वैश्विक अस्थायी चर में बदल दिया और उन्होंने काम किया।

नीचे मेरी संग्रहीत कार्यप्रणाली खोजें

 CREATE PROCEDURE RAFCustom_Room_GetRelatedProducts -- Add the parameters for the stored procedure here @PRODUCT_SKU nvarchar(15) = Null 

प्रारंभ के रूप में – SELECT NOCOUNT पर अतिरिक्त परिणाम सेट को रोकने के लिए जोड़ा गया – SELECT कथन के साथ हस्तक्षेप। सेट नाकनेट चालू;

 IF OBJECT_ID('tempdb..##RelPro', 'U') IS NOT NULL BEGIN DROP TABLE ##RelPro END Create Table ##RelPro ( RowID int identity(1,1), ID int, Item_Name nvarchar(max), SKU nvarchar(max), Vendor nvarchar(max), Product_Img_180 nvarchar(max), rpGroup int, Assoc_Item_1 nvarchar(max), Assoc_Item_2 nvarchar(max), Assoc_Item_3 nvarchar(max), Assoc_Item_4 nvarchar(max), Assoc_Item_5 nvarchar(max), Assoc_Item_6 nvarchar(max), Assoc_Item_7 nvarchar(max), Assoc_Item_8 nvarchar(max), Assoc_Item_9 nvarchar(max), Assoc_Item_10 nvarchar(max) ); Begin Insert ##RelPro(ID, Item_Name, SKU, Vendor, Product_Img_180, rpGroup) Select distinct zp.ProductID, zp.Name, zp.SKU, (Select m.Name From ZNodeManufacturer m(nolock) Where m.ManufacturerID = zp.ManufacturerID), 'http://s0001.server.com/is/sw11/DG/' + (Select m.Custom1 From ZNodeManufacturer m(nolock) Where m.ManufacturerID = zp.ManufacturerID) + '_' + zp.SKU + '_3?$SC_3243$', ep.RoomID From Product zp(nolock) Inner Join RF_ExtendedProduct ep(nolock) On ep.ProductID = zp.ProductID Where zp.ActiveInd = 1 And SUBSTRING(zp.SKU, 1, 2) <> 'GC' AND zp.Name <> 'PLATINUM' AND zp.SKU = (Case When @PRODUCT_SKU Is Not Null Then @PRODUCT_SKU Else zp.SKU End) End declare @curr_row int = 0, @tot_rows int= 0, @sku nvarchar(15) = null; IF OBJECT_ID('tempdb..##TSku', 'U') IS NOT NULL BEGIN DROP TABLE ##TSku END Create Table ##TSku (tid int identity(1,1), relsku nvarchar(15)); Select @curr_row = (Select MIN(RowId) From ##RelPro); Select @tot_rows = (Select MAX(RowId) From ##RelPro); while @curr_row <= @tot_rows Begin select @sku = SKU from ##RelPro where RowID = @curr_row; truncate table ##TSku; Insert ##TSku(relsku) Select distinct top(10) tzp.SKU From Product tzp(nolock) INNER JOIN [INTRANET].raf_FocusAssociatedItem assoc(nolock) ON assoc.associatedItemID = tzp.SKU Where (assoc.isActive=1) And (tzp.ActiveInd = 1) AND (assoc.productID = @sku) declare @curr_row1 int = (Select Min(tid) From ##TSku), @tot_rows1 int = (Select Max(tid) From ##TSku); If(@tot_rows1 <> 0) Begin While @curr_row1 <= @tot_rows1 Begin declare @col_name nvarchar(15) = null, @sqlstat nvarchar(500) = null; set @col_name = 'Assoc_Item_' + Convert(nvarchar(2), @curr_row1); set @sqlstat = 'update ##RelPro set ' + @col_name + ' = (Select relsku From ##TSku Where tid = ' + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' + Convert(nvarchar(2), @curr_row); Exec(@sqlstat); set @curr_row1 = @curr_row1 + 1; End End set @curr_row = @curr_row + 1; End Select * From ##RelPro; 

अंत जाओ

मुझे नहीं लगता कि यह संभव है ( हालांकि नीचे अपडेट को देखें ); जहां तक ​​मुझे पता है कि एक तालिका चर केवल उस दायरे के भीतर मौजूद है जो इसे घोषित किया है। हालांकि, आप अस्थायी तालिका का उपयोग कर सकते हैं ( create table सिंटैक्स create table उपयोग करें और # सिग्नल के साथ अपने टेबल नाम का उपसर्ग का उपयोग करें), और यह जो दोनों स्कोप बनाता है और आपके डायनामिक स्टेटमेंट का दायरा है

अद्यतन: एक डायनामिक एसक्यूएल कथन में एक तालिका चर को पारित करने के लिए तालिका-मान वाले पैरामीटर का उपयोग करने के लिए मार्टिन स्मिथ का जवाब देखें। यह भी उल्लेख किया गया है कि सीमा-उल्लेखनीय पैरामीटर केवल-पढ़ने योग्य हैं

Temp तालिका का उपयोग करना समस्या को हल करता है, लेकिन मैं Exec का उपयोग कर समस्याओं में भाग गया, इसलिए मैं sp_executesql का उपयोग करने के निम्नलिखित समाधान के साथ गया:

 Create TABLE #tempJoin ( Old_ID int, New_ID int); declare @table_name varchar(128); declare @strSQL nvarchar(3072); set @table_name = 'Object'; --build sql sting to execute set @strSQL='INSERT INTO '+@table_name+' SELECT '+@columns+' FROM #tempJoin CJ Inner Join '+@table_name+' sourceTbl On CJ.Old_ID = sourceTbl.Object_ID' **exec sp_executesql @strSQL;** 

यहां एक डायनामिक टी-एसक्यूएल क्वेरी का उपयोग करने का एक उदाहरण है और फिर परिणामों को निकालने के लिए आपको लौटा मूल्यों के एक से अधिक कॉलम (डायनेमिक टेबल नाम पर ध्यान दें) होना चाहिए:

 DECLARE @strSQLMain nvarchar(1000), @recAPD_number_key char(10), @Census_sub_code varchar(1), @recAPD_field_name char(100), @recAPD_table_name char(100), @NUMBER_KEY varchar(10), if object_id('[Permits].[dbo].[myTempAPD_Txt]') is not null DROP TABLE [Permits].[dbo].[myTempAPD_Txt] CREATE TABLE [Permits].[dbo].[myTempAPD_Txt] ( [MyCol1] char(10) NULL, [MyCol2] char(1) NULL, ) -- an example of what @strSQLMain is : @strSQLMain = SELECT @recAPD_number_key = [NUMBER_KEY], @Census_sub_code=TEXT_029 FROM APD_TXT0 WHERE Number_Key = '01-7212' SET @strSQLMain = ('INSERT INTO myTempAPD_Txt SELECT [NUMBER_KEY], '+ rtrim(@recAPD_field_name) +' FROM '+ rtrim(@recAPD_table_name) + ' WHERE Number_Key = '''+ rtrim(@Number_Key) +'''') EXEC (@strSQLMain) SELECT @recAPD_number_key = MyCol1, @Census_sub_code = MyCol2 from [Permits].[dbo].[myTempAPD_Txt] DROP TABLE [Permits].[dbo].[myTempAPD_Txt]