2012-02-23 16 views
5

किसी को भी मेरे विवरण में जांच कर सकता है एसक्यूएल सर्वर ...घोषणा एसक्यूएल चर -

DECLARE @tblName varchar(MAX), 
     @strSQL varchar(MAX) 

SET @tblName ='SELECT DISTINCT o.name as TableName 
       FROM sysobjects o 
       JOIN sysindexes x on o.id = x.id 
       WHERE o.name LIKE ''%empty%''' 

SET @strSQL = 'INSERT INTO @tblName VALUES(''trylng'', ''1'')' 
EXEC (@strSQL) 

मेरी त्रुटि है ...

संदेश 1087, स्तर 15, राज्य 2, पंक्ति 1
टेबल वैरिएबल "@tblName" घोषित करना होगा।

मुझे क्या करना चाहते हैं चर @tblName पर तालिका नाम हो और @strSQL चर

उदाहरण के लिए में कुछ डेटा सम्मिलित है ... @tblName में परिणाम @strSQL मैं में CustomerInfo

तो है मेरे Insert कमांड में मेरे टेबल नाम के रूप में परिणाम @tblName में परिणाम का उपयोग करने जा रहा है।

तो @strSQL चर होगा;

INSERT INTO CustomerInfo VALUES(......) 
+1

[एसक्यूएल डेक्लेयर वैरिएबल] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/9407703/sql-declare-variables) –

उत्तर

2

अपने अन्य प्रश्न के मेरा उत्तर से इस प्रयास करें:

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%' 

SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')' 
EXEC (@strSQL) 

आप अभी भी एसक्यूएल सर्वर संस्करण उपयोग कर रहे उल्लेख नहीं कर रहे हैं। लेकिन SQL सर्वर 2005 या नए के रूप में, आपको sysobjects और sysindexes का उपयोग करना बंद करना चाहिए - इसके बजाय, नई sys स्कीमा का उपयोग करें जिसमें समान जानकारी कम या कम हो - लेकिन अधिक आसानी से उपलब्ध हो।

देखें [एमएसडीएन: SQL सर्वर सिस्टम कैटलॉग पूछताछ] [1] नए sys स्कीमा में उपलब्ध होने के बारे में बहुत अधिक जानकारी के लिए और इसे सबसे अधिक कैसे बनाएं!

+0

ओह, मेरा बुरा, मैं SQL का उपयोग कर रहा हूं सर्वर 2008, nway..thanks 4 डी मदद –

+0

एक और बात ... क्या होगा यदि मैं सम्मिलित कमांड से पहले @strSQL में IF स्टेटमेंट का उपयोग करने जा रहा हूं क्योंकि मैं पहले सत्यापित करना चाहता हूं कि क्या मान जो मैं सम्मिलित करने जा रहा हूं तालिका में मौजूद नहीं है। कई प्रश्नों के लिए खेद है ... coz मैं केवल एसक्यूएल का अध्ययन शुरू कर रहा हूं। –

2

जब आप एक ही घोषित बयान, you only put the type once (अंत में) के साथ एक से अधिक चर घोषित:

DECLARE @tblName varchar(MAX), 
     @strSQL varchar(MAX) 

SET @tblName = (SELECT DISTINCT TOP 1 o.name as TableName 
       FROM sysobjects o 
       JOIN sysindexes x on o.id = x.id 
       WHERE o.name LIKE '%empty%') 

SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')' 
EXEC (@strSQL) 

कुछ भी:

DECLARE @tblName, @strSQL varchar(MAX) 
+0

मैं मूल प्रश्न शपथ ले सकता था MySQL (जो मैंने उत्तर दिया) के बारे में था। ऐसा लगता है कि एसक्यूएल सर्वर DECLARE कथन – colithium

+0

में डुप्लिकेट प्रकार परिभाषाओं की अनुमति देता है यह उत्तर गलत है। SQL सर्वर 'DECLARE @tblName, @strSQL वर्कर (MAX)' की अनुमति नहीं देता है। एक * * प्रत्येक वैरिएबल के प्रकार को निर्दिष्ट करना चाहिए: 'घोषित @i int, @t varchar (अधिकतम);' –

1

यह वास्तव में कुछ चला सकते हैं होना चाहिए उद्धरण में इसका मतलब है कि यह एक स्ट्रिंग है और एसक्यूएल सर्वर को कथन के रूप में चलाने की उम्मीद नहीं है, स्ट्रिंग में चर के लिए एक ही चीज़ है, आप इसे

0 उद्धृत नहीं कर सकते
+0

'DSINTINCT' ** और **' TOP 1' थोड़ा अधिक है ..... आपके पास केवल 1 परिणाम है, संभवतः डुप्लिकेट संभव नहीं हो सकता ..... –

+0

बस यह सुनिश्चित करना चाहते हैं कि यह क्रैश नहीं होगा क्योंकि कुछ अलग-अलग तालिका में समान नाम हो सकता है –

संबंधित मुद्दे