我试图找到某个列的数据类型并使用它来将我正在硬编码的值(可能是1,因为它似乎是最灵活的)转换为列的数据类型被动态插入。我从C#运行此SQL,但实体框架和存储过程当前不可用。我只需要知道是否可以在系统表(特定于sys.types)上使用子查询来动态选择我转换为的数据类型。
这就是我所拥有的:
UPDATE TableName
SET ColumnName =
COALESCE(
(SELECT TOP(1) ColumnName
FROM TableName
Where TableName IS NOT NULL),
CAST(1 AS (SELECT t.name
FROM sys.types t
JOIN sys.columns c
ON c.user_type_id = t.user_type_id
WHERE c.object_id = Object_id('dbo.TableName') AND
c.name = 'ColumnName')))
WHERE ColumnName IS NULL
这样做的目的是,如果列中已经有一个非空的值,那就使用它(因为我只是试图填充列中的NULL,特殊于虚拟数据)该类型)以及以其他方式搜索该列的类型并将值1
转换为它。
任何见解?
答案 0 :(得分:0)
我建议您按以下方式构建Dinamic SQL:
DECLARE @SQL AS NVARCHAR(MAX);
SET @SQL = 'UPDATE TableName
SET ColumnName =
COALESCE(
(SELECT TOP(1) ColumnName
FROM TableName
Where TableName IS NOT NULL),
' +
(SELECT t.name
FROM sys.types t
JOIN sys.columns c
ON c.user_type_id = t.user_type_id
WHERE c.object_id = Object_id('TableName ') AND
c.name = 'ColumnName') + '))
WHERE ColumnName IS NULL;'
PRINT @SQL; -- For debugging purposes
EXEC SP_ExecuteSQL @SQL;
我尝试过使用本地表,看起来不错。