我正在尝试构建一个存储过程中的动态 SQL 语句。这是它的简化版本:
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = N'(
SELECT * FROM dbo.Orders WHERE UserID = '+@UserID+'
)
EXEC sys.sp_executesql @SQLString
我遇到的问题是sp_executesql
仅适用于 Unicode 数据。所以我得到一个@UserID
整数参数的转换错误:
转换 nvarchar 值 'SELECT * FROM dbo.Orders WHERE UserID = ' 时转换失败
我必须在存储过程开始时声明我的参数,并让用户提供这些值。到目前为止,我看到的使用示例sp_executesql
显示了在运行时定义的参数及其值sp_executesql
。这对我不起作用,因为我需要在同一存储过程的其他区域重用参数。
如果不将所有参数指定为 type ,我怎么能解决这个问题nvarchar
?