如何使用 string/variable 插入 table 列
How to INSERT INTO table column with string/variable
这是我从 powershell 中提取的数据并将其插入#temptable:
Name : SULESRKMA
Location : Leisure Services - Technology Services
Shared : False
ShareName :
JobCountSinceLastReset : 0
PrinterState : 131072
Status : Degraded
Network : False
我正在遍历数据并从标识符中删除了值。我想使用这些标识符将值插入到具有与标识符相同的列名的 table 中。因此,例如,我有一个名为 @identifier = "Name" 的变量和一个列名为 Name 的临时 table #printers。我想做类似的事情:
SELECT --select statement
INSERT INTO #printers(@identifier)
但这似乎并不奏效,不足为奇。有没有办法做到这一点? (@identifier 变量将在整个 while 循环过程中更改为数据中的其他标识符。)
欢迎任何甚至不涉及使用这种方法的替代建议。我的最终目标只是将这些数据作为一行放入 table.
(我目前正在使用 Microsoft SQL Server Management Studio,如果这很重要的话)
首先,在这种情况下您不太可能需要遍历任何内容。当您考虑 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
中为您尝试添加数据的 table 中的每一列设置一个值。因此,例如,如果 #temptable
中有 4 列,而您只有 3 个值要插入(第 1、2 和 3 列),那么您需要 NULL
第 4 列或静态设置它.
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
NULL
INTO #temptable
--or
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
'static value'
INTO #temptable
编辑
如果要使用变量指定要插入的列,则必须使用动态 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
这是我从 powershell 中提取的数据并将其插入#temptable:
Name : SULESRKMA
Location : Leisure Services - Technology Services
Shared : False
ShareName :
JobCountSinceLastReset : 0
PrinterState : 131072
Status : Degraded
Network : False
我正在遍历数据并从标识符中删除了值。我想使用这些标识符将值插入到具有与标识符相同的列名的 table 中。因此,例如,我有一个名为 @identifier = "Name" 的变量和一个列名为 Name 的临时 table #printers。我想做类似的事情:
SELECT --select statement
INSERT INTO #printers(@identifier)
但这似乎并不奏效,不足为奇。有没有办法做到这一点? (@identifier 变量将在整个 while 循环过程中更改为数据中的其他标识符。)
欢迎任何甚至不涉及使用这种方法的替代建议。我的最终目标只是将这些数据作为一行放入 table.
(我目前正在使用 Microsoft SQL Server Management Studio,如果这很重要的话)
首先,在这种情况下您不太可能需要遍历任何内容。当您考虑 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
中为您尝试添加数据的 table 中的每一列设置一个值。因此,例如,如果 #temptable
中有 4 列,而您只有 3 个值要插入(第 1、2 和 3 列),那么您需要 NULL
第 4 列或静态设置它.
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
NULL
INTO #temptable
--or
SELECT
@identifier,
@anotherIdentifer,
@someOtherIdentifier,
'static value'
INTO #temptable
编辑
如果要使用变量指定要插入的列,则必须使用动态 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