我尝试在参数中使用具有最高值的选择语句,例如:
CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + @NUM + ' * FROM MYTABLE;'
BEGIN
EXEC sp_executesql @SQL
END
它返回我一个错误:
将 varchar 值"选择顶部"转换为 数据类型 int。
但是当我从int
更改为nvarchar
它的工作时:
PROC_TOP @NUM nvarchar(50)
DECLARE @SQL nvarchar(255)
我的问题是:
为什么 Sql 接受数据类型nvarchar
而不是Int
?
DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + cast(@NUM as varchar(6)) + ' * FROM MYTABLE;'
与 + 的字符串连接不会进行数据类型转换,如果您使用 concat,它将隐式进行数据类型转换,如下所示
CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = concat('SELECT TOP ' , @NUM , ' * FROM MYTABLE;')
BEGIN
EXEC sp_executesql @SQL
END