संग्रहित प्रक्रिया में क्वेरी स्ट्रिंग में पैरामीटर के रूप में एक तालिका जोड़ना

मेरे पास निम्न प्रश्न है:

   ALTER procedure [dbo].[jk_insertAllLocation]
   @locationTbl as locationTable readonly,
   @TableName varchar(100)
   as
   declare @tbl as locationTable,@sql varchar(max)
   begin
        set @sql = 'insert into ' + @TableName +'(location_id,name,address,latitude,longitude,distance,state,sub_cat,id_cat,icon_link,checkinsCount,IDSearch)
        select * from ' +  @locationTbl
        exec sp_executesql @sql
   end

मुझे पैरामीटर के रूप में एक टेबल और टेबल नाम पास करने की आवश्यकता है और मुझे टेबल नाम ( @TableName ) में तालिका में सभी डेटा पैरामीटर के रूप में पारित करने की आवश्यकता है ( @locationTbl ) पैरामीटर के रूप में पारित किया

लेकिन मुझे पता है कि मैं तालिका में तालिका ( @locationTbl ) को संयोजित नहीं कर सकता ...

तो मैं इसे कैसे ठीक कर सकता हूं?

0
यह आम तौर पर टूटे हुए डेटा मॉडल का संकेत होता है - उनमें से प्रत्येक तालिका में एक समान संरचना होनी चाहिए, जो शायद सुझाव दे कि डेटा का हिस्सा दुरुपयोग किया गया है और तालिका में समाप्त हो गया है नाम । आपको शायद यह होना चाहिए कि इस सामान्य संरचना और अतिरिक्त कॉलम के साथ एक ही तालिका है जिसमें वर्तमान में डेटा का उपयोग करने के लिए उपयोग किया जा रहा डेटा निर्धारित करने के लिए उपयोग किया जा रहा है। मुझे आशा है कि आपके पास MaleEmployees और FemaleEployploy टेबल नहीं होंगे ...
जोड़ा लेखक Damien_The_Unbeliever, स्रोत
@Damien_The_Unbeliever सच है, लेकिन अगर उसके पास डिज़ाइन नियंत्रण नहीं है तो अनुपयोगी।
जोड़ा लेखक Doug_Ivison, स्रोत
यह कुशल या सुंदर नहीं है, इसलिए मैं इसे "उत्तर" के रूप में सबमिट नहीं करूंगा ... लेकिन यह काम करेगा: पहले workTable डालें का चयन करें । दो दृष्टिकोण: या तो (1) अनन्य कॉलम के साथ स्थायी तालिका का पुन: उपयोग करें (जैसे प्राथमिक पंक्ति जो प्रत्येक पंक्ति के लिए बदलती है, और प्रारंभिक पैरामीरी_एडडेट टाइमटाइम जो सभी पंक्तियों के लिए वही रहता है यह निष्पादन sproc का), और उसके बाद उस संदर्भ को निर्दिष्ट करें जो आपके सम्मिलित/चयन में अद्वितीय कॉलम है, या (2) प्रत्येक निष्पादन के लिए एक अद्वित
जोड़ा लेखक Doug_Ivison, स्रोत

1 उत्तर

आप temp टेबल (लिंक पर अस्थायी तालिका अनुभाग) का उपयोग कर सकते हैं:

ALTER procedure [dbo].[jk_insertAllLocation]
  @locationTbl as locationTable readonly,
  @TableName varchar(100)
as
begin
  declare @tbl as locationTable,@sql varchar(max)
  if object_id('#_tmp_location_table') is not null drop table #_tmp_location_table
  select * into #_tmp_location_table from @locationTbl
  set @sql = 'insert into ' + @TableName + '(location_id,name,address,latitude,longitude,distance,state,sub_cat,id_cat,icon_link,checkinsCount,IDSearch) select * from #_tmp_location_table'
  exec sp_executesql @sql
end
1
जोड़ा
मुझे नाम वैध पहचानकर्ता नहीं है? इस पंक्ति पर set @sql = '+TableName +' में डालें (location_id, name ...
जोड़ा लेखक User7291, स्रोत
यह ओकी है मैंने इसे ठीक किया है यह .NET से कुछ था
जोड़ा लेखक User7291, स्रोत
@JocelyneElKhoury, पूर्ण त्रुटि संदेश क्या है?
जोड़ा लेखक shibormot, स्रोत