s-s-rs-report:如何修复错误过程需要“ntext/nchar/nvarchar”类型的参数“@parameters”
Posted
技术标签:
【中文标题】s-s-rs-report:如何修复错误过程需要“ntext/nchar/nvarchar”类型的参数“@parameters”【英文标题】:s-s-rs-report : how to fix error Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar' 【发布时间】:2020-06-26 04:25:51 【问题描述】:我的数据库中有调用表名的参数,例如我的数据库中的表名,如 GPS-RV.1_b。 然后我尝试在我的查询生成器中调用它,例如
declare @cmd nvarchar(max)
set @cmd = ' select top 100 X,Y,Z from dbo.' + @tableName
DECLARE @ParmDefinition nvarchar(100) = N'@tableName nvarchar(100)';
print @cmd
exec sp_executesql @cmd, @ParmDefinition = '@tableName';
它已经运行,但是当我尝试输入我的表名并按确定按钮时,它显示此错误
------------------ 执行查询时出错。 过程需要类型为“ntext/nchar/nvarchar”的参数“@parameters”。 ------------------------------ 附加信息: 过程需要类型为“ntext/nchar/nvarchar”的参数“@parameters”。 (Microsoft SQL Server,错误:214) 如需帮助,请单击:http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1617&EvtSrc=MSSQLServer&EvtID=214&LinkId=20476 ------------------------------ 纽扣: 好的 ------------------------------
我的查询中是否缺少任何部分?还是我做错了? 感谢您的帮助和任何修复它的建议。
【问题讨论】:
这不是它的工作原理。您已连接表名;这不是参数 sommarskog.se/dynamic_sql.html 【参考方案1】:只执行你的@cmd
语句而不发送参数
declare @cmd nvarchar(max)
set @cmd = ' select top 100 X,Y,Z from dbo.' + @tableName
print @cmd
exec sp_executesql @cmd
正如@Mitch Whaeat 所说,@tableName
不是参数,它只是一个变量。请记住将值分配给@tableName
变量。
【讨论】:
已经在测试您的帮助,但它显示错误,例如“-”附近的语法不正确。 ------------------------------ 附加信息:'-' 附近的语法不正确。 (Microsoft SQL Server,错误:102) 如需帮助,请单击:go.microsoft.com/… ------------------------------ 按钮:确定------------------------------ " 在我的数据库中,我的表有一个带有符号组合的名称,如减号 ' - ' , dot ' 。 ' 并在 '_' 下划线。 这种情况下需要使用括号set @cmd = ' select top 100 X,Y,Z from dbo.[' + @tableName + ']'
哇,这绝对是我想要的,非常感谢@JotaPardo 帮助我。【参考方案2】:
您将 @cmd 声明为 NVARCHAR
set @cmd = N' select top';
或
exec sp_executesql N''+ @cmd +'';
【讨论】:
以上是关于s-s-rs-report:如何修复错误过程需要“ntext/nchar/nvarchar”类型的参数“@parameters”的主要内容,如果未能解决你的问题,请参考以下文章