【发布时间】:2015-03-09 13:26:05
【问题描述】:
我的任务是:创建一个表,并在同一个存储过程中向表中插入 n 个值。
CREATE PROCEDURE PROC
@tableName nvarchar(30),
@nRows int
AS
BEGIN
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(@tableName)
AND type in (N'U'))
DROP TABLE [dbo].[@tableName ]
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'CREATE TABLE ' + @tableName +
'(
[ID] [int] IDENTITY(1,1) NOT NULL,
[col1] [int] NOT NULL
); GO';
EXEC (@SQLString);
DECLARE @i int = 1;
WHILE (@i <= @nRows)
BEGIN
SET @i = @i + 1;
INSERT INTO @tableName values (@i);
END
END
我知道问题是表在提交之前不存在;这就是为什么我不能插入。但是如何重写它才能完成我的任务?
【问题讨论】:
-
这里有几个问题。首先,您需要使用 Quotename 包装您的表变量,以帮助防止 sql 注入,或者如果该值包含空格或其他需要使用方括号的字符。然后你需要使用数字或计数表而不是循环插入一堆整数。插入也必须使用动态 sql 完成,您不能像使用变量名那样进行插入。
标签: sql sql-server stored-procedures sql-insert