使用存储过程从现有表创建新表

时间:2011-11-15 21:26:40

标签: sql-server-2008 stored-procedures

  

可能重复:
  How can I make this query to accept dynamic table names?

我想使用存储过程从现有表创建一个新表。我是新手,但学习没问题。无论如何这就是我所做的:

CREATE PROCEDURE usp_CreateNewTable

    @NewTable nvarchar(1000),
    @OldTable nvarchar(1000)
    AS
    SELECT *
    INTO @NewTable
    FROM @OldTable
    WHERE 1 = 2                
GO

它给了我一个错误:

  

'@NewTable'附近的语法不正确

请深入挖掘并帮助......

2 个答案:

答案 0 :(得分:0)

您不能直接将变量名称用于对象名称。您必须编写一个表示SELECT语句的字符串,并将其作为动态SQL执行。

答案 1 :(得分:0)

您可以使用动态SQL,如下所示:

CREATE PROCEDURE usp_CreateNewTable
    @NewTable nvarchar(1000),
    @OldTable nvarchar(1000)
AS
BEGIN

DECLARE @query AS NVARCHAR(MAX)

SET @query = 'SELECT * INTO ' + @NewTable + ' FROM ' + @OldTable + ' WHERE 1=1'

EXEC sp_executesql @query

END