将表名作为输入参数传递给SQL服务器存储过程
问题描述:
我正在使用SQLserver 2008,并且我创建了一个存储过程以将多个记录插入到表中。但是我无法将表名称作为输入参数。将表名作为输入参数传递给SQL服务器存储过程
USE $(DbName)
GO
DECLARE @command varchar(1000),@i int, @tabname as varchar(100)
set @tabname = $(tabn)
set @i = $(startn)
while @i < $(endn)
BEGIN
SET @command = 'Insert into '+($tabn)+'(Name,Address) Values("Act'+ CAST(@i AS varchar) +'","Place '+ CAST(@i AS varchar) +'")'
EXEC (@command)
SET @i = @i + 1
END
Go
获取误差
C:\Program Files\Microsoft SQL Server\100\Tools\Binn>SQLCMD.EXE -v DbName="Gannu"
startn="90" endn="180" tabn="Sandeep" -i U:\SSHScript\recvariable.sql
Changed database context to 'Gannu'.
Msg 126, Level 15, State 1, Server BRANCH1_WIN, Line 6
Invalid pseudocolumn "$tabn".
有人可以帮我在这?
答
我可以运行上面的查询与变量的地方的一些数据。
的唯一的事情,我发现有问题的是使用值法,将双引号(“)。双引号是行不通的。你需要使用单引号那里。
USE VAIBHAVDB
if OBJECT_ID('MyTable', 'U') is not null
drop table MyTable
Go
create table MyTable (name varchar(500), address varchar(500))
GO
DECLARE @command nvarchar(1000),@i int, @tabname as varchar(100)
set @tabname = 'MyTable'
set @i = 1
while @i < 5
BEGIN
SET @command = 'Insert into '[email protected] +'(Name,Address) Values('+ '''' + 'Act' + CAST(@i AS varchar) + '''' +' ,'+''''+'Place '+ CAST(@i AS varchar) +''''+')'
PRINT @command
EXEC (@command)
SET @i = @i + 1
END
Go
答
这应该解决您的问题
USE $(DbName)
GO
DECLARE @command varchar(1000),@i int, @tabname as varchar(100)
set @tabname = '$(tabn)'
set @i = $(startn)
while @i < $(endn)
BEGIN
SET @command = 'Insert into ' + @tabname + '(Name,city) Values("Act'+ CAST(@i AS varchar) +'","Place '+ CAST(@i AS varchar) +'")'
EXEC (@command)
SET @i = @i + 1
END
Go
C:\ Program Files文件\ Microsoft SQL Server的\ 100个\ TOOLS \ BINN> SQLCMD.EXE -v DBNAME = “敢怒” tabn = “巴拉斯” startn = “20” endn = “25” -i T:\ SSHScript \ validate.sql
Chan ged数据库上下文到'Gannu'。
(1行受影响)