我有以下代码可以在我的给定表中提取我的列的名称:
SELECT
column_name + ','
FROM
information_schema.columns
WHERE
table_name = 'maintReq'
FOR XML PATH('')
我想把它放到我当前的查询中:
SET IDENTITY_INSERT maintReq ON;
GO
INSERT INTO maintReq
OUTPUT Inserted.ID
VALUES ((SELECT ISNULL(MAX(id) + 1, 0)
FROM maintReq WITH(SERIALIZABLE, UPDLOCK)
),'MAYBE', 'true');
SET IDENTITY_INSERT maintReq OFF;
我自己尝试过以下操作:
SET IDENTITY_INSERT maintReq ON;
GO
INSERT INTO maintReq (
SELECT
column_name + ','
FROM
information_schema.columns
WHERE
table_name = 'maintReq'
for
xml path('')
)
OUTPUT Inserted.ID
VALUES (
(
SELECT
ISNULL(MAX(id)+1,0)
FROM
maintReq WITH(SERIALIZABLE, UPDLOCK)
),'MAYBE', 'true'
);
SET IDENTITY_INSERT maintReq OFF;
但是,我得到了以下错误:
消息 156,级别 15,状态 1,第 4 行
关键字“SELECT”附近的语法不正确。消息 102,级别 15,状态 1,第 8 行
')' 附近的语法不正确。消息 102,级别 15,状态 1,第 16 行
',' 附近的语法不正确。
不确定该错误是由添加到 XML 路径输出中的额外逗号调用还是由其他原因调用?
我的完整存储过程如下所示:
DECLARE @SQLQuery VARCHAR(MAX);
SET @SQLQuery = 'SET IDENTITY_INSERT ' + @val1 + ' ON
INSERT INTO ' +
@val1 + '
OUTPUT Inserted.ID
VALUES ' +
'(
(
SELECT
ISNULL(MAX(id)+1,0)
FROM
' + @val1 + ' WITH(SERIALIZABLE, UPDLOCK)
),''' + @val2 + ''', ''' + @val3 + '''
) ' +
'SET IDENTITY_INSERT ' + @val1 + ' OFF;'
EXEC [dbo].[_chkQ] @SQLQuery
上面的 SP 是我目前收到此错误的原因:
只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 'maintReq' 中的标识列指定显式值。
感谢@Pரதீப்,这是最终的工作查询代码:
SET @SQLQuery = 'SET IDENTITY_INSERT ' + @val1 + ' ON
INSERT INTO ' + @val1 + '(' +
Stuff(
(SELECT
',' + quotename(column_name)
FROM
information_schema.columns
WHERE
table_name = '' + @val1 + ''
FOR xml path('')
), 1, 1, ''
) +
')
OUTPUT Inserted.ID
VALUES ' +
'(
(
SELECT
ISNULL(MAX(id)+1,0)
FROM
' + @val1 + ' WITH(SERIALIZABLE, UPDLOCK)
),''' + @val2 + ''', ''' + @val3 + '''
) ' +
'SET IDENTITY_INSERT ' + @val1 + ' OFF;'