我的数据库的一个表中的一列说(表A和列A)可以是数字类型或VARCHAR类型。动态决定数据类型,然后创建表。
我需要创建一个动态变量(@Dynamic),它应该检查该列的数据类型,并相应地为它分配一个不同的列(B列或C列),即
。我要在SQL Server和Oracle中执行此操作。
任何为此编写函数的帮助都将非常感激。
答案 0 :(得分:1)
在sql server中,您可以检查列数据类型
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Table A'
AND COLUMN_NAME = 'Column A'
在oracle中
SELECT Type
FROM user_tab_columns
WHERE table_name = 'Table A'
AND column_name = 'Column A';
答案 1 :(得分:1)
Sql_variant是SQL Server中的动态类型。 oracle中的等价是anydata类型。 但是,如果您使用动态SQL,为什么不将数据存储在nvarchar中,因为它对于convertet数值也足够大,您可以直接将它用于动态SQL语句?
答案 2 :(得分:0)
实际上这是一个通用问题,不需要任何样本数据来回答。
我遵循的方法是:
我写了一个函数
CREATE FUNCTION [dbo].[GET_DATA_TYPE] (@input VARCHAR)
RETURNS VARCHAR(255) AS
BEGIN
DECLARE @l_data_type VARCHAR(255)
SELECT @l_data_type=DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = @input AND
COLUMN_NAME = 'AssetID'
RETURN @l_data_type
END
我会在我的存储过程中将此函数称为
SELECT @dataType = dbo.GET_DATA_TYPE(@input);
我宣布另一个变量,即@FinalType
IF @dataType == 'numeric'
THEN @FinalType = columnC
IF @dataType == 'nvarchar'
THEN @FinalType = columnD
然后我将在所有动态sqls中使用此@FinalType
变量。
任何其他有效的方法。