2014-04-04 184 views
0

我想從存儲過程創建表,但在執行過程中,我得到這些錯誤:如何從存儲過程創建表?

消息343,級別15,狀態1,行1
未知的對象類型「TABLEPunith_INC_T_Partner_PlusEligible_YE_APJC」使用在CREATE,DROP或ALTER語句中。
Msg 4701,Level 16,State 1,Line 1
找不到對象「PTEST」,因爲它不存在或您沒有權限。

這是我的存儲過程

ALTER PROCEDURE [dbo].[SP_PTEST2] 
AS 
BEGIN 
    DECLARE @OBJECTNM NVARCHAR(100) 
    DECLARE @SQLSTR  NVARCHAR(MAX) 

    SET @OBJECTNM = 'PTEST' 

    IF (EXISTS (SELECT 1 FROM SYS.OBJECTS WHERE NAME = 'PTEST')) 
    BEGIN 
     SET @SQLSTR = 'DROP TABLE ' + @OBJECTNM 
     EXEC(@SQLSTR) 
    END 

    SET @SQLSTR = 'CREATE TABLE' + @OBJECTNM + '(
    Country    VARCHAR(255), 
    BE_Geo_ID    INT, 
    BE_Geo_Name   VARCHAR(255), 
    Certification   VARCHAR(200), 
    )' 

    EXEC(@SQLSTR) 

    SET @SQLSTR = 'TRUNCATE TABLE ' + @OBJECTNM 
    EXEC(@SQLSTR) 

    SET @SQLSTR = 'BULK INSERT ' + @OBJECTNM + 
       ' FROM ''C:\Desktop\Part plus.csv'' 
        WITH (
         FIELDTERMINATOR = '','', 
         ROWTERMINATOR = ''\n'', 
         FIRSTROW = 2 
       )' 

    EXEC(@SQLSTR) 
End 

我花了幾個小時就這一點,但我無法執行存儲過程,還當我試圖與執行不同類型的程序,但不創建表。

有人請幫助我。
在此先感謝。

+1

備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

+0

感謝marc_s的建議,我已更新SP名稱並嘗試過。 – Punith

回答

4
SET @SQLSTR = 'CREATE TABLE_' + @OBJECTNM + '(
    Country    VARCHAR(255), 

缺少一個空格,將其添加到我在上面放置_的位置。
@SQLSTR在讀CREATE TABLEPTEST(代替CREATE TABLE PTEST(

編輯,註釋不清晰,準確地與下面的行替換您的生產線。上述不起作用,因爲我使用下劃線作爲佔位符,以便您可以看到缺失空間的位置。

SET @SQLSTR = 'CREATE TABLE ' + @OBJECTNM + '(
+0

你好,Daniel,我已經編輯過了,但仍然出現同樣的錯誤,所以我編輯瞭如'SET @SQLSTR ='CREATE'+'TABLE'+ @OBJECTNM +'(..)'',但現在我得到錯誤,比如'國家'附近語法不正確。'我更新了問題請看看。 – Punith

+1

你現在根本沒有空格。它的計算結果爲'CREATETABLEPTEST'(' 該行必須是 SET @SQLSTR ='CREATE TABLE'+ @OBJECTNM +'(' –