2011-01-26 63 views
0

我将这个查询作为我们的长存储过程的一部分。
正如您所看到的,我们声明了表,以便我们可以在同一过程中重复使用此查询。如何使此声明在动态查询上可重用?

如何使这种动态?
原因在我的情况下,lime_survey_XXX的表是动态的,具体取决于您通过的变量。
现在...我可以包含这个DECLARE @lime_survey_generic作为查询字符串的一部分,但是我希望能够在稍后在同一存储过程中重复使用此表。

DECLARE @lime_survey_generic TABLE 
(
    id INT, 
    submitdate DATETIME, 
    lastpage INT, 
    startlanguage VARCHAR(20), 
    token VARCHAR(36), 
    datestamp DATETIME, 
    startdate DATETIME, 
    ipaddr TEXT, 
    refurl TEXT, 
    Q010101 VARCHAR(5), 
    Q010102 VARCHAR(5), 
    Q010103 TEXT, 
    Q010201 VARCHAR(5), 
    Q010202 VARCHAR(5), 
    Q010203 TEXT, 
    Q010301 VARCHAR(5), 
    Q010302 VARCHAR(5), 
    Q010303 TEXT, 
    Q010401 VARCHAR(5), 
    Q010402 VARCHAR(5), 
    Q010403 TEXT, 
    Q010501 VARCHAR(5), 
    Q010502 VARCHAR(5), 
    Q010503 TEXT, 
    Q010601 VARCHAR(5), 
    Q010602 VARCHAR(5), 
    Q010603 TEXT, 
    Q010701 VARCHAR(5), 
    Q010702 VARCHAR(5), 
    Q010703 TEXT, 
    Q010801 VARCHAR(5), 
    Q010802 VARCHAR(5), 
    Q010803 TEXT, 
    Q010901 VARCHAR(5), 
    Q010902 VARCHAR(5), 
    Q010903 TEXT, 
    Q011001 VARCHAR(5), 
    Q011002 VARCHAR(5), 
    Q011003 TEXT, 
    Q011101 VARCHAR(5), 
    Q011102 VARCHAR(5), 
    Q011103 TEXT, 
    Q011201 VARCHAR(5), 
    Q011202 VARCHAR(5), 
    Q011203 TEXT, 
    Q011301 VARCHAR(5), 
    Q011301Other TEXT 
); 


DECLARE @SQL NVARCHAR(128); 
SET @SQL = N'INSERT INTO ' + @lime_survey_generic + ' ' + 
    'SELECT * FROM lime_survey_' + CAST(@SurveyID AS VARCHAR) 

EXECUTE sp_executesql @SQL 

回答

0

也许是这样的:

DECLARE @lime_survey_generic TABLE 
(
    id INT, 
    submitdate DATETIME, 
    lastpage INT, 
    startlanguage VARCHAR(20), 
    token VARCHAR(36), 
    datestamp DATETIME, 
    startdate DATETIME, 
    ipaddr TEXT, 
    refurl TEXT, 
    Q010101 VARCHAR(5),  Q010102 VARCHAR(5),  Q010103 TEXT, 
    Q010201 VARCHAR(5),  Q010202 VARCHAR(5),  Q010203 TEXT, 
    Q010301 VARCHAR(5),  Q010302 VARCHAR(5),  Q010303 TEXT, 
    Q010401 VARCHAR(5),  Q010402 VARCHAR(5),  Q010403 TEXT, 
    Q010501 VARCHAR(5),  Q010502 VARCHAR(5),  Q010503 TEXT, 
    Q010601 VARCHAR(5),  Q010602 VARCHAR(5),  Q010603 TEXT, 
    Q010701 VARCHAR(5),  Q010702 VARCHAR(5),  Q010703 TEXT, 
    Q010801 VARCHAR(5),  Q010802 VARCHAR(5),  Q010803 TEXT, 
    Q010901 VARCHAR(5),  Q010902 VARCHAR(5),  Q010903 TEXT, 
    Q011001 VARCHAR(5),  Q011002 VARCHAR(5),  Q011003 TEXT, 
    Q011101 VARCHAR(5),  Q011102 VARCHAR(5),  Q011103 TEXT, 
    Q011201 VARCHAR(5),  Q011202 VARCHAR(5),  Q011203 TEXT, 
    Q011301 VARCHAR(5),  Q011301Other TEXT 
); 


DECLARE @SQL NVARCHAR(128); 
SET @SQL = N'SELECT * FROM lime_survey_' + CAST(@SurveyID AS VARCHAR); 

INSERT INTO @lime_survey_generic 
    EXECUTE sp_executesql @SQL;