是的,您可以将
sql_variants参数作为传递给
sp_executesql,但是您需要使用“转换为”类型继续沿动态SQL路由进行下去,并使用为所使用的列确定的类型名称
CAST。
以这个为例:
CREATE TABLE Foo( ID INT);declare @type NVARCHAr(20) = N'INT'; -- Substitute your Type here.declare @tableName NVARCHAr(50) = 'Foo';declare @value sql_variant;set @value = 1234;DECLARE @Sql AS NVARCHAr(MAX) = N'INSERT INTO [dbo].'+ @tableName +N' VALUES(CAST(@value AS ' + @type + '))';EXECUTE sp_executesql @Sql, N'@value sql_variant', @value = @value;
不用说,您将需要确保您的
@tableName和
Type数据需要针对白名单运行,以便使用这种动态Sql来防止Sql Injection漏洞。
SqlFiddle在这里



