I have a temp table called #ColumnList that holds a list of column names. I need to loop through each row in this table and look to see if the column is a primary key. If it is a key then I need to add that column name to a column called PRIMARYKEYCOLUMN.
This is what I have so far but it doesn't work. It throws an error
Cannot insert the value NULL into column 'DataType', table 'tempdb.dbo.#ColumnList__________________0000000B0D8C'; column does not allow nulls. INSERT fails.
ALTER TABLE #ColumnList
ADD PRIMARYKEYCOLUMN VARCHAR(50);
INSERT INTO #ColumnList ([PRIMARYKEYCOLUMN])
(SELECT DISTINCT KU.column_name as PRIMARYKEYCOLUMN
FROM
sys.columns c
JOIN sys.types t ON t.user_type_id = c.user_type_id
AND t.system_type_id = c.system_type_id
JOIN sys.tables tab ON c.object_id = tab.object_id
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC ON TC.TABLE_NAME = tab.name
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND
TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME AND
KU.table_name='myTableName'
JOIN #ColumnList cl ON cl.ColumnName = KU.COLUMN_NAME)
The subquery above (without the JOIN #ColumnList cl ON cl.ColumnName = KU.COLUMN_NAME) works fine and returns the results below. The insert doesn't work however.
[PRIMARYKEYCOLUMN]
Column1
Column2
Column3
I need those same columns above to be inserted in the temp table where those same column names exist
An update statement might work, something like :
update
#ColumnList
set
PRIMARYKEYCOLUMN = ColumnName
where
ColumnName in (
SELECT
DISTINCT KU.column_name
FROM
sys.columns c
JOIN
sys.types t
ON t.user_type_id = c.user_type_id
AND t.system_type_id = c.system_type_id
JOIN
sys.tables tab
ON c.object_id = tab.object_id
JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
ON TC.TABLE_NAME = tab.name
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME
AND KU.table_name='myTableName'
)