运行带有错误的示例存储过程对象引用未设置为对象的实例

时间:2015-04-08 18:20:44

标签: sql-server tsql

请帮忙。

我正在尝试创建一个类似于此代码的过程:

 DECLARE @OldPK AS VARCHAR(50)
 DECLARE @PK AS VARCHAR(50)
 DECLARE @S AS NVARCHAR(MAX)
 DECLARE @P AS NVARCHAR(MAX)

 SET @PK = 'ModeName'
 SET @S = N'SELECT @pOldPK = @pPK FROM Modes '
 SET @P = N'@pPK VARCHAR(50), @pOldPK VARCHAR(50) OUTPUT'
 EXECUTE dbo.sp_executesql @S, @P, @pPK = @PK, @pOldPK = @OldPK OUTPUT
 SELECT @OldPK

当我尝试调试并在行之后

 EXECUTE dbo.sp_executesql @S, @P, @pPK = @PK, @pOldPK = @OldPK OUTPUT

停止并生成错误

  

对象引用未设置为对象的实例

非常感谢您的宝贵意见。

感谢。

1 个答案:

答案 0 :(得分:0)

立即尝试,您的列名将被视为文字字符串,就像您尝试这样做一样。

DECLARE @OldPK AS VARCHAR(50)
 DECLARE @PK AS VARCHAR(50)
 DECLARE @S AS NVARCHAR(MAX)
 DECLARE @P AS NVARCHAR(MAX)

 SET @PK = 'ModeName'
 SET @S = N'SELECT TOP 1 @pOldPK = ' + QUOTENAME(@pPK) + ' FROM Modes '
 SET @P = N'@pOldPK VARCHAR(50) OUTPUT'
 EXECUTE dbo.sp_executesql @S
                         , @P
                         , @pOldPK = @OldPK OUTPUT
 SELECT @OldPK