Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过参数传递列名时删除引号_Sql_Sql Server - Fatal编程技术网

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列
类型?