【发布时间】:2012-07-16 15:25:21
【问题描述】:
我正在尝试构建一个 SQL 字符串以通过 sp_executesql 执行,但我似乎无法为传入的 sql 字符串中的声明变量赋值。
下面是我的程序示例
ALTER PROCEDURE [dbo].[selectRecords]
@psID INT --parameter passed in
AS
DECLARE @existingRecordCount INT=0
DECLARE @sql NVARCHAR(1000)
DECLARE @paramDefinitions NVARCHAR(1000)
SET @paramDefinitions=
'@psID INT,
@existingRecordCount INT OUTPUT'
SET @sql='
SELECT
@existingRecordCount=COUNT(Name)
FROM dbo.Asset_Log
WHERE ID=@psID
GROUP BY Name'
EXECUTE sp_executesql @sql, @paramDefinitions, @psID, @existingRecordCount
所以,我希望我的记录计数在 @existingRecordCount 变量中,但我收到以下错误:
“OUPUT”附近的语法不正确。
必须声明标量变量“@existingRecordCount”。
我做错了什么?
提前致谢。我正在使用 SQL Server 2008
【问题讨论】:
-
OUTPUT不是OUPUT。也像EXECUTE sp_executesql @sql, @paramDefinitions, @psID, @existingRecordCount OUTPUT一样调用并在外面声明@psID并为其分配要传入的值。 -
你能解释一下为什么这需要动态 SQL 吗?
-
马丁,谢谢。对不起错字。 Aaron,我刚刚修改了这篇文章的示例
标签: sql-server-2008 variables stored-procedures sp-executesql