【发布时间】:2009-01-19 13:17:13
【问题描述】:
以下代码为要插入的新记录生成主键并将记录插入到表中,表的名称和要插入的值作为存储过程的参数给出。我收到运行时错误。我正在使用 Visual Studio 2005 来处理 SQL Server 2005 Express Edition
ALTER PROCEDURE spGenericInsert
(
@insValueStr nvarchar(300),
@tblName nvarchar(10)
)
AS
DECLARE @sql nvarchar(400)
DECLARE @params nvarchar(200)
DECLARE @insPrimaryKey nvarchar(10)
DECLARE @rowCountVal integer
DECLARE @prefix nvarchar(5)
--following gets the rowcount of the table--
SELECT @rowCountVal = ISNULL(SUM(spart.rows), 0)
FROM sys.partitions spart
WHERE spart.object_id = object_id(@tblName) AND spart.index_id < 2
SET @rowCountVal = @rowCountVal+1
--Following Creates the Primary Key--
IF @tblName = 'DEFECT_LOG'
SET @prefix='DEF_'
ELSE IF @tblName='INV_Allocation_DB'
SET @prefix='INV_'
ELSE IF @tblName='REQ_Master_DB'
SET @prefix='REQ_'
ELSE IF @tblName='SW_Master_DB'
SET @prefix='SWI_'
ELSE IF @tblName='HW_Master_DB'
SET @prefix='HWI_'
SET @insPrimaryKey= @prefix + RIGHT(replicate('0',5)+ convert(varchar(5),@rowCountVal),5) -- returns somethin like 'DEF_00005'
-- Following is for inserting into the table --
SELECT @sql = N' INSERT INTO @tableName VALUES ' +
N' ( @PrimaryKey , @ValueStr )'
SELECT @params = N'@tableName nvarchar(10), ' +
N'@PrimaryKey nvarchar(10), ' +
N'@ValueStr nvarchar(300)'
EXEC sp_executesql @sql, @params, @tableName=@tblName, @PrimaryKey=@insPrimaryKey, @ValueStr=@insValueStr
输出消息:
Running [dbo].[spGenericInsert] ( @insValueStr = 2,"Hi",1/1/1987, @tblName = DEFECT_LOG ).
Must declare the table variable "@tableName".
No rows affected.
(0 row(s) returned)
@RETURN_VALUE = 0
Finished running [dbo].[spGenericInsert].
【问题讨论】:
标签: sql-server stored-procedures visual-studio-2005