我尝试在参数中使用带顶值的select语句:
CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + @NUM + ' * FROM MYTABLE;'
BEGIN
EXEC sp_executesql @SQL
END
它给我一个错误:
将varchar值'SELECT TOP'转换为时,转换失败 数据类型int。
但是,当我从int
更改为nvarchar
时,我的工作是:
PROC_TOP @NUM nvarchar(50)
DECLARE @SQL nvarchar(255)
我的问题是:
为什么Sql接受数据类型nvarchar
而不是Int
?
答案 0 :(得分:2)
DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + cast(@NUM as varchar(6)) + ' * FROM MYTABLE;'
答案 1 :(得分:1)
使用+进行字符串连接不会进行数据类型转换,如果使用concat,它将隐式执行数据类型转换,如下所示
CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = concat('SELECT TOP ' , @NUM , ' * FROM MYTABLE;')
BEGIN
EXEC sp_executesql @SQL
END