如何让 sp_executesql 接受非 nvarchar 的参数值
How to get sp_executesql to accept parameter values that are not nvarchar
我正在尝试构建存储过程中的动态 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
参数上遇到转换错误:
Conversion failed when converting the nvarchar value 'SELECT * FROM dbo.Orders WHERE UserID = '
我必须在存储过程开始时声明我的参数,以便用户提供这些值。到目前为止,我看到的使用 sp_executesql
的示例显示了在 sp_executesql
运行时定义的参数及其值。这对我不起作用,因为我需要在同一存储过程的其他区域重用这些参数。
如何在不将所有参数指定为 nvarchar
类型的情况下解决此问题?
不清楚为什么要在此处使用动态 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, N'@UserID int', @UserID= @UserID
试试这个...
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQLString NVARCHAR(MAX);
SET @SQLString = N' SELECT * FROM dbo.Orders '
+ N' WHERE UserID = @UserID '
EXEC sp_executesql @SQLString
,N'@UserID INT'
,@UserID
END
或者简单地使用以下
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM dbo.Orders
WHERE UserID = @UserID
END
我正在尝试构建存储过程中的动态 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
参数上遇到转换错误:
Conversion failed when converting the nvarchar value 'SELECT * FROM dbo.Orders WHERE UserID = '
我必须在存储过程开始时声明我的参数,以便用户提供这些值。到目前为止,我看到的使用 sp_executesql
的示例显示了在 sp_executesql
运行时定义的参数及其值。这对我不起作用,因为我需要在同一存储过程的其他区域重用这些参数。
如何在不将所有参数指定为 nvarchar
类型的情况下解决此问题?
不清楚为什么要在此处使用动态 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, N'@UserID int', @UserID= @UserID
试试这个...
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQLString NVARCHAR(MAX);
SET @SQLString = N' SELECT * FROM dbo.Orders '
+ N' WHERE UserID = @UserID '
EXEC sp_executesql @SQLString
,N'@UserID INT'
,@UserID
END
或者简单地使用以下
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM dbo.Orders
WHERE UserID = @UserID
END