如何使用字符串/变量INSERT INTO表列

时间:2016-10-14 17:05:56

标签: sql-server database tsql powershell printers

这是我从powershell中提取并将其插入#temptable:

的数据
Name                   : SULESRKMA
Location               : Leisure Services - Technology Services
Shared                 : False
ShareName              : 
JobCountSinceLastReset : 0
PrinterState           : 131072
Status                 : Degraded
Network                : False

我正在循环访问数据并从标识符中删除了值。我想使用这些标识符将值插入到具有相同列名称的表中。例如,我有一个名为@identifier =“Name”的变量和一个列名为Name的临时表#printers。我想做点什么:

SELECT --select statement
INSERT INTO #printers(@identifier)

但这似乎不起作用,不足为奇。有没有办法实现这个目标? (@identifier变量将在整个while循环过程中更改为数​​据中的其他标识符。)

欢迎任何甚至不涉及使用此类方法的替代建议。我的最终目标是将这些数据作为一行放入表中。

(如果重要的话,我目前正在使用Microsoft SQL Server Management Studio)

1 个答案:

答案 0 :(得分:1)

首先,在这种情况下你不太可能需要循环任何东西。在考虑SQL时,请考虑基于集合的操作。

INSERT INTO #temptable (Column1Name, Column2Name, Column3Name)
VALUES (@identifer, @anotherIdentifier, @someOtherIdentifier)
--optional clauses
WHERE Column1Name = 'some value' OR Column1Name = @someIdentifier

或者你可以SELECT INTO

SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier
INTO #temptable

对于您尝试将数据添加到的表格中的每一列,SELECT INTO都有一个值非常重要。因此,例如,如果#temptable中有4列,并且您只有3个要插入的值(第1,2和3列),那么您需要NULL第4列或静态设置它。

SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
NULL
INTO #temptable
--or
    SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
'static value'
INTO #temptable

修改

如果要使用varible指定要插入的列,则必须使用动态sql。这是一个例子:

if object_id ('tempdb..#tempTable') is not null drop table #tempTable
create table #tempTable (Column1Name int, Column2Name int, Column3Name int)

declare @columnName varchar(64) = 'Column1Name'
declare @sql varchar(max)

set @sql = 
'insert into #tempTable (' + @columnName + ')
select 1'

exec(@sql)

select * from #tempTable