Sql 通过参数传递列名时删除引号
您好,我正在尝试执行以下操作:Sql 通过参数传递列名时删除引号,sql,sql-server,Sql,Sql Server,您好,我正在尝试执行以下操作: 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 ) 如果没有行,它可以正常工作,但是当有行时,第二个查询返回一个具有
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\u column
中有引号。因此,当将nvarchar值“columnname”转换为int数据类型时,我得到的转换失败。我怎样才能解决这个问题
谢谢你的帮助 我认为您试图从表中获取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()。如果对象名包含非字母数字字符或在其他方面是奇数,那么这将防止发生有趣的事情
什么是@IDENTITY\u列
类型?