我必须增加出现在多个表中的主键的长度。我必须以编程方式执行此操作并在多个数据库中执行。 我快到了,一切都单独工作,但是当我把所有东西放在一起时,最后一行出现错误
ALTER TABLE table1 ADD PRIMARY KEY(PRIMARYKEYCOLUMN)
Msg 1911,级别 16,状态 1,第 30 行
目标表或视图中不存在列名“PRIMARYKEYCOLUMN”。消息 1750,级别 16,状态 0,第 30 行
无法创建约束或索引。查看以前的错误。
这是整个查询
DECLARE @Col1Len varchar(100) = (SELECT character_maximum_length
FROM information_schema.columns
WHERE table_name = 'table1'
AND column_name = 'Col1')
IF (@Col1Len < 60)
BEGIN
DECLARE @PKs TABLE (PRIMARYKEYCOLUMN varchar(100))
INSERT INTO @PKs (PRIMARYKEYCOLUMN) (
SELECT column_name AS PRIMARYKEYCOLUMN
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
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 = 'table1')
SELECT * FROM @PKs
DECLARE @PK varchar(100) = (SELECT name
FROM sysobjects
WHERE xtype = 'PK'
AND parent_obj IN (SELECT id
FROM sysobjects
WHERE name = 'table1')
)
DECLARE @Command varchar(100) = 'ALTER TABLE table1 DROP CONSTRAINT ' + @PK
EXECUTE (@Command)
ALTER TABLE table1
ALTER COLUMN Col1 varchar(40) NOT NULL
ALTER TABLE table1
ADD PRIMARY KEY(PRIMARYKEYCOLUMN)
END
如果我只运行下面的块,它会工作并且找到主键并将它们插入到@PKs 表中。
DECLARE @PKs TABLE (
PRIMARYKEYCOLUMN varchar(100)
)
Insert into @PKs (PRIMARYKEYCOLUMN) (
SELECT column_name as PRIMARYKEYCOLUMN
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
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='table1'
)
SELECT * from @PKs
我做错了什么?