使用变量转换数据类型

2 t-sql sql-server

在T-SQL中是否可以转换具有变量类型的数据类型?

即虽然这不起作用,因为它期望一个字符串文字,但获得要点:

select @DataType = Data_Type
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'emp'
and COLUMN_NAME = 'emp_id'

SELECT
cast(emp_id as @DataType)
FROM emp
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 7

不,您需要为此使用动态SQL,例如

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = N'SELECT CAST(emp_id AS ' + Data_Type
 + ') FROM dbo.emp;'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'emp'
AND TABLE_SCHEMA = 'dbo' -- this might be important!
AND COLUMN_NAME = 'emp_id';

PRINT @sql;
-- EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)

但是,这对我来说似乎不对.为什么不知道列的数据类型?

此外,您还需要一个更复杂的查询,因为您需要考虑精度/比例/最大长度.例如,如果emp_id是a varchar,则所有结果将被截断为一个字符.

最后,我强烈建议sys.columnsINFORMATION_SCHEMA.