SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE LEFT(CONSTRAINT_NAME, 2) = N'PK'
AND TABLE_NAME = OBJECT_NAME(c.OBJECT_ID)
AND COLUMN_NAME = c.name
) THEN 1 ELSE 0 END AS Reserve_flag --INTO #lynntest  --存放数据库表格的字段数据
FROM sys.columns AS c 
WHERE OBJECT_ID in
 (object_id('dbo.t_Account'),object_id('dbo.t_Bank'),object_id('dbo.t_Charge'),object_id('dbo.t_Commodity'),
object_id('t_EQSize'),object_id('t_Country'),object_id('t_Currency'),object_id('t_CurrencyRate'),object_id('t_Customer'))
 ORDER BY OBJECT_NAME(OBJECT_ID), column_id
经理说我代码不优化,给我改成了这样,弄了个sys.columns as C 
结果当我要把where object_id in 括号里面的object_id都删了的时候。提示出错
“在将 varchar 值 'dbo.t_Account' 转换成数据类型 int 时失败。”
我把括号里改成('dbo.t_Account','dbo.t_Bank',......)
咋搞得?怎么处理啊?
  

解决方案 »

  1.   

    语句没贴完整把。只见then...else... 不见case...
      

  2.   

    where OBJECT_NAME(c.OBJECT_ID) in(....)
      

  3.   

    case,在前面。我没贴出来。这整段东西,我执行是没错的。
    但是就是去掉了括号里的object_id()就出错了。我试试看你的哦。wxkayx接下去又出问题了。select单独执行没问题。当把select放入insert后面。提示出错了。
    insert into #lynntest (Grid_code,Column_name,Column_id,Column_note,Reserve_flag) 
    select grid_code, 'Edit_command' as column_name,  max(column_id) + 1 as column_id, 
    'N''<a href="javascript;;" onClick="do'+SUBSTRING(grid_code, 1,LEN(grid_code)-4 )+'Edit(this, '' + CONVERT(NVARCHAR(20), Row_id) + '');">Edit</a>''' as column_note,
    '0' 
    from #lynntest
    group by grid_code将截断字符串或二进制数据。
    语句已终止。
      

  4.   

    为啥我这样了。
    WHERE OBJECT_NAME(c.OBJECT_ID) in
     ('dbo.t_Account','dbo.t_Bank','dbo.t_Charge','dbo.t_Commodity',比原来少掉一百多条数据了啊
      

  5.   

    弄好了。。是我错了。。去掉dbo.  直接写表格名,就全对了。谢谢!