本文介绍了在插入查询中动态选择列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

获取错误无效的列名 @ColumnNames。在最后一行(插入子句)中,知道为什么吗?

Getting error Invalid column name '@ColumnNames'. in the last line (insert clause), any idea why ?

Declare @ColumnNames varchar(2000)
Declare @OrderId int
set @OrderId = 110077

select @ColumnNames = COALESCE(@ColumnNames + ', ', '') + COLUMN_NAME
    from
        INFORMATION_SCHEMA.COLUMNS
    where
        TABLE_NAME='OrderItems'

Insert into dbo.OrderHistory(@ColumnNames) select * from dbo.[Order] where ID= @OrderId


推荐答案

@ColumnNames 是一个字符串文字,而不是列列表。结果,当您尝试将其用作插入查询中的列名列表时,它将失败。

@ColumnNames is a string of text, not a list of columns. As a result, when you try to use it as a list of column names in the insert query, it fails.

您可以使用动态SQL来完成您想要的事情,像这样:

You can use dynamic SQL to do what you desire, like so:

declare @insertquery nvarchar(1000)
set @insertquery = N'insert into dbo.orderhistory(' + @ColumnNames + ') select * from dbo.[Order] where ID=' + cast(@OrderId as nvarchar(10))

sp_executesql @insertquery

这篇关于在插入查询中动态选择列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-24 21:32