如何解决嗨,我是sql的初学者我在UDF函数标量中遇到问题
我的功能是:
Create Function [dbo].[FindMaxRadif](@field nvarchar(15),@tbl nvarchar(15))
returns int
as
begin
declare @query int
set @query = 'select max('+ @field+') from '+ @tbl
return (@query)
end
使用以下命令执行此功能时:
select dbo.FindMaxRadif('IdVehicle','TblVehicle')
我收到此错误:
转换nvarchar值'select时转换失败 TblVehicle'中的max(IdVehicle)到数据类型为int。
如何解决?
解决方法
用户定义的函数中不允许使用动态SQL。不允许他们进行数据更改,并且禁止使用动态SQL可以强制执行更改。您可以改用存储过程,将数据作为结果集返回:
$ date --date "2020-10-03T17:49:23" "+%Y-%m-%dT%H:%M:%S"
2020-10-03T17:49:23
$ date --date "2020-10-03T17:49:23 + 1 second" "+%Y-%m-%dT%H:%M:%S"
2020-10-03T17:49:24
$ date --date "2020-10-03T17:49:23 + 2 second" "+%Y-%m-%dT%H:%M:%S"
2020-10-03T16:49:24
$ date --date "2020-10-03T17:49:23 + 2 seconds" "+%Y-%m-%dT%H:%M:%S"
2020-10-03T16:49:24
$ date --date "2020-10-03T17:49:23 - 2 seconds" "+%Y-%m-%dT%H:%M:%S"
2020-10-03T20:49:24
或输出参数
create or alter procedure [dbo].[FindMaxRadif] @field nvarchar(15),@tbl nvarchar(15)
as
/*
create table a(i int)
insert into a(i) values (1),(2);
exec FindMaxRadif 'i','a'
*/
begin
declare @query nvarchar(max);
set @query = concat('select max(',quotename(@field),') from ',quotename(@tbl));
--print @query
exec(@query);
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。