【发布时间】:2015-07-24 01:07:30
【问题描述】:
我正在尝试在存储过程中构建动态 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 运行时定义的参数及其值。这对我不起作用,因为我需要在同一存储过程的其他区域重用参数。
如果不将所有参数指定为nvarchar 类型,我该如何解决这个问题?
【问题讨论】:
标签: sql-server stored-procedures sql-server-2012 dynamic-sql sp-executesql