如何从存储过程创建表?

时间:2014-04-04 11:27:01

标签: sql sql-server sql-server-2008 stored-procedures

我正在尝试从存储过程创建表,但在执行过程时,我收到了这些错误:

  

Msg 343,Level 15,State 1,Line 1
  未知对象类型' TABLEPunith_INC_T_Partner_PlusEligible_YE_APJC'用于CREATE,DROP或ALTER语句   消息4701,级别16,状态1,行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 个答案:

答案 0 :(得分:4)

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

缺少空格,将其添加到上面放_的位置 @SQLSTR正在阅读CREATE TABLEPTEST(而不是CREATE TABLE PTEST(

编辑,评论不清楚,请用下面的行完全替换你的行。上面的方法不起作用,因为我使用下划线作为占位符,以便您可以看到缺失空间的位置。

SET @SQLSTR = 'CREATE TABLE '  + @OBJECTNM + '(
相关问题