嗨,我正在尝试执行以下操作:
SELECT @IDENTITY_COLUMN = (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tbltest1'
SELECT @LAST_VALUE_USED = (
SELECT ISNULL(MAX(@IDENTITY_COLUMN),0)
FROM tbltest1
)
如果没有行,则工作正常,但是当有行时,第二个查询返回的是具有列名的字符串,我相信这是因为@IDENTITY_COLUMN
中带有引号。因此,我得到Conversion failed when converting the nvarchar value 'columnname' to data type int
。我该如何解决这个问题?
帮助表示赞赏!
答案 0 :(得分:2)
我认为您正在尝试从表中获取IDENTITY
列的最大值(如果存在这样的列)。为此,您需要动态SQL。像这样:
DECLARE @identity_column sysname;
DECLARE @query nvarchar(MAX);
SET @identity_column = (SELECT column_name
FROM information_schema.columns
WHERE table_name = 'tbltest1');
IF @identity_column IS NOT NULL
BEGIN
SET @query = '
SELECT isnull(max(' + quotename(@identity_column) + '), 0)
FROM tbltest1;
';
EXECUTE (@query);
END;
注意:
sysname
,这是它们的另一种类型。请勿使用varchar
或navarchar
等。quotename()
。如果对象名称包含非字母数字字符或其他方式为奇数,则可以防止发生有趣的事情。