我有一个下面的SQL表:
Types table
--------------------------------------
|Name(varchar(50))|Type (varchar(50))|
--------------------------------------
| Car | varchar(50) |
| Apples | int |
--------------------------------------
我正在使用另一个表来存储值,例如:
Apples table:
----------------------------
|Value (providedType - int)|
----------------------------
|50 |
|60 |
----------------------------
要将值插入这些表中,我正在使用存储过程(其中一部分):
CREATE PROCEDURE [dbo].[AddValue]
@value sql_variant
@name varchar(50)
@tableName (50)
AS
BEGIN
DECLARE @Sql NVARCHAR(MAX)
DECLARE @valueType VARCHAR(50)
SET @valueType = (SELECT [Type] FROM [dbo].[Types] WHERE [Name] = @name)
SET @Sql = N'INSERT INTO [dbo].'+ @tableName + N' VALUES(' + @value + N')'
EXECUTE sp_executesql @Sql
...
动态执行将引发一个异常,即不允许隐式转换sql_variant。有什么方法可以将sql_variant类型转换为varchar提供的类型?如:
CONVERT(@valueType, @value)
其中@valueType是varchar而不是datetype
是的,您可以将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在这里
问题内容: 我在下面的查询中,需要转换为 架构图 我尝试了什么 但它们不起作用。请提出建议。 问题答案: 您将需要或作为数据类型,没有可以将数据强制转换/转换为以下数据的数据类型: 请参阅下面的SQL(实际上)在SQL Fiddle中 : 除了您试图转换为不正确的数据类型外,您所使用的语法也不正确。该函数使用以下列或值: 要么 您的原始查询的语法向后。
问题内容: 我试图在我的数字列中附加一些alphabt来获取记录。但即时通讯收到错误,我尝试了强制转换和转换功能。 例如 这里StandardCost是一个数字字段,但是当我获取记录时遇到错误,请看看。 问题答案: 我认为应该 或者
本文向大家介绍Dapper.NET 将varchar转换为IHtmlString,包括了Dapper.NET 将varchar转换为IHtmlString的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 如何将GUID字符转换为VARCHAR(32)? 我正在尝试将数据从一个表复制到另一个表。这两个表中有两个相似的列。 Table1.colx 是一个GUID,因此由于连字符的原因,它的总长度为字符 对应的列是 table2.colx, 但它是VARCHAR(32) 我正在寻找一种将GUID转换为VARCHAR的方法,但是我必须删除连字符。到目前为止,我一直没有成功找到实现此目标的方法。
问题内容: 我从表(源)中进行操作,其中每一列都是数据类型。 列之一存储二进制数据,例如 我在其中插入目标表的列具有相同的列,但数据类型为。 当我插入它时,然后选择目标表,我从该列中得到了一个不同的值: 它看起来似乎并不真正具有相同的价值。 什么应该是转变作为二进制数据存储的正确方法,以列? 问题答案: 您得到的结果是因为字符串“0003f80075177fe6”(一个值)被转换为代码点,并且这些