[英]SQL Dynamic Exchange Rate
目前还不清楚你为什么在这里使用动态 SQL ,也许你应该充实你的例子。
但是您需要做的是使用sp_executesql
正确地参数化它。 不要像在其他答案中那样注入它。
ALTER PROCEDURE [dbo].[TEST] (@CCY char(3))
AS
SET NOCOUNT ON;
DECLARE @sql nvarchar(max) = N'
SELECT RATE
FROM USERCONFIG.dbo.curr
WHERE CODE = @CCY;
';
EXEC sp_executesql
@sql,
N'@CCY char(3)',
@CCY = @CCY;
你根本不需要 Dynamic SQL ,你收到错误的原因是因为你是。 正如您已经确认您所拥有的语句实际上就是您所拥有的(没有隐藏的要求),只需在您的过程中使用您的非动态语句:
ALTER PROCEDURE [dbo].[TEST] (@CCY char(3)) AS
BEGIN
SET NOCOUNT ON;
SELECT RATE
FROM USERCONFIG.dbo.curr
WHERE CODE = @CCY;
END;
除了设计问题(见评论)之外,您的动态代码还尝试执行以下查询:
SELECT RATE
FROM USERCONFIG.dbo.curr
WHERE CODE = GBP
因此它尝试将列 CODE 与列 GBP 匹配。 因此错误。
使用字符串转换构建动态 SQL 的方法是在字符串周围使用两次单引号,例如:
'SELECT RATE
FROM USERCONFIG.dbo.curr
WHERE CODE = ''' + @CCY + '''
'
重复的单引号在执行时变成单引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.