可能重复:
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'附近的语法不正确
请深入挖掘并帮助......
答案 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