आपका @tblName
संपत्ति बाहरी गुंजाइश पर मौजूद है, लेकिन एसक्यूएल तुम वहाँ स्ट्रिंग में निर्माण कर रहे हैं के भीतर गुंजाइश पर नहीं ....
आप की जरूरत है पढ़ने के लिए अपनी लाइनों को बदलने के लिए:
SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
और फिर यह ठीक काम करना चाहिए।
इसके अलावा, आप अपने एसक्यूएल सर्वर संस्करण का उल्लेख नहीं कर रहे हैं - लेकिन SQL सर्वर 2005 या नए के रूप में, आप sysobjects
और sysindexes
का उपयोग कर बंद कर देना चाहिए - इसके बजाय, नई sys
स्कीमा कि लगभग समान ही में जानकारी शामिल है का उपयोग करें - लेकिन अधिक आसानी से उपलब्ध है। करने के लिए आपकी क्वेरी को बदलें:
SET @tblName ='SELECT DISTINCT t.name as TableName
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE ''%empty%'''
एक बहुत अधिक जानकारी के लिए देखें MSDN: Querying the SQL Server System Catalog क्या इसका पूरा लाभ उठाने के लिए नए sys
स्कीमा में उपलब्ध है और तरीका बताया गया है पर!
"rsbarro" के रूप में इंगित किया गया: इस SQL कथन को यहां उद्धरणों में डालना अजीब है - क्या आप EXEC(...)
का उपयोग करके इस कथन को निष्पादित कर रहे हैं ?? लेकिन फिर आप मूल्य को @tblName
संपत्ति पर वापस कैसे निर्दिष्ट करते हैं? वास्तव में नहीं है भावना .....
आप एक मूल्य प्राप्त करने के लिए वास्तव में इस क्वेरी चलाने के लिए चाहते हैं, आप कुछ इस तरह होना चाहिए:
SELECT TOP 1 @tblName = t.name
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE '%empty%'
आप में एक TOP 1
की आवश्यकता है सुनिश्चित करने के लिए केवल एक ही मूल्य प्राप्त करने के लिए - अन्यथा यह कथन विफल हो सकता है (यदि एकाधिक पंक्तियां चुनी जाती हैं)।
स्रोत
2012-02-23 05:48:56
मुझे आशा है कि जो कुछ भी तालिका वापस आती है, वहां केवल दो कॉलम हैं, और डेटा प्रकार मिलान ... –
@OMGPonies: आप निश्चित रूप से डालने योग्य कॉलम का मतलब है। –