我想做这样的事情:
DECLARE @number INT = 2
DECLARE @TableResult AS TABLE
(
Row1 VARCHAR (150),
Row2 VARCHAR (1500),
Row3 VARCHAR (150),
Row4 NUMERIC(18, @number)
)
因为@number
将会发生变化。
我尝试了一下,但出现了“语法错误”错误。
有什么办法可以做类似的事情吗?
答案 0 :(得分:1)
SQL Server在设计上是声明性的,不支持宏替换。
也就是说,如果您不嫁给表变量,则可以使用 temp 表。
示例
Declare @number INT = 3
Create table #TableResult (
Row1 VARCHAR (150),
Row2 VARCHAR (1500),
Row3 VARCHAR (150)
)
-- Add a new column via dynamic SQL
Declare @SQL varchar(max) = concat('Alter Table #TableResult add Row4 Numeric(18,',@number,')')
Exec(@SQL)
-- See the results
Select column_ordinal,name,system_type_name from sys.dm_exec_describe_first_result_set('Select * from #TableResult',null,null )
新结构
column_ordinal name system_type_name
1 Row1 varchar(150)
2 Row2 varchar(1500)
3 Row3 varchar(150)
4 Row4 numeric(18,3)