CREATE PROCEDURE GetDay
(
@datetime char(7),
@table char(6),
@watermetername nvarchar(100)
)
ASDECLARE @SQL AS  nvarchar(3500) 
SET @SQL='SELECT c_datetime,c_bzs FROM' + ' ' + @table
SET @SQL=@SQL + ' ' + 'where convert(char(7),c_datetime,102)=' +@datetime
SET @SQL=@SQL + ' ' + 'and convert(char(8),c_datetime,108)=' +'"00:00:00"'
SET @SQL=@SQL + ' ' + 'and Tag=' + @watermetername
SET @SQL=@SQL+ ' ' + 'ORDER BY c_datetime ASC'EXECUTE sp_executesql @SQL
这是我定义的PROCE 执行:exec GetDay '2005.01','sc2005','GSDYH_JXC_LJLL'
错误提示
服务器: 消息 207,级别 16,状态 3,行 1
列名 'GSDYH_JXC_LJLL' 无效。
Tag在数据库的定义是char(25)这是什么错误

解决方案 »

  1.   

    CREATE PROCEDURE GetDay
    (
    @datetime char(7),
    @table char(6),
    @watermetername nvarchar(100)
    )
    ASDECLARE @SQL AS  nvarchar(3500) 
    SET @SQL='SELECT c_datetime,c_bzs FROM' + ' ' + @table
    SET @SQL=@SQL + ' ' + 'where convert(char(7),c_datetime,102)=' +@datetime
    SET @SQL=@SQL + ' ' + 'and convert(char(8),c_datetime,108)=' +'"00:00:00"'
    SET @SQL=@SQL + ' ' + 'and Tag=''' + @watermetername+''''
    SET @SQL=@SQL+ ' ' + 'ORDER BY c_datetime ASC'EXECUTE sp_executesql @SQL
      

  2.   

    加引号CREATE PROCEDURE GetDay
    (
    @datetime char(7),
    @table char(6),
    @watermetername nvarchar(100)
    )
    ASDECLARE @SQL AS  nvarchar(3500) 
    SET @SQL='SELECT c_datetime,c_bzs FROM' + ' ' + @table
    SET @SQL=@SQL + ' ' + 'where convert(char(7),c_datetime,102)=' +@datetime
    SET @SQL=@SQL + ' ' + 'and convert(char(8),c_datetime,108)=' +'"00:00:00"'
    SET @SQL=@SQL + ' ' + 'and Tag=''' + @watermetername + ''''
    SET @SQL=@SQL+ ' ' + 'ORDER BY c_datetime ASC'EXECUTE sp_executesql @SQL
      

  3.   

    create PROCEDURE GetDay
    (
    @datetime char(7),
    @table char(6),
    @watermetername nvarchar(100)
    )
    ASDECLARE @SQL AS  nvarchar(3500) 
    SET @SQL='SELECT c_datetime,c_bzs FROM' + ' ' + @table
    SET @SQL=@SQL + ' ' + 'where convert(char(7),c_datetime,102)=''' +@datetime+''''
    SET @SQL=@SQL + ' ' + 'and convert(char(8),c_datetime,108)=' +'''00:00:00'''
    SET @SQL=@SQL + ' ' + 'and Tag=''' + @watermetername+''''
    SET @SQL=@SQL+ ' ' + 'ORDER BY c_datetime ASC'EXECUTE sp_executesql @SQL
      

  4.   

    调试类似的错误,就好的方法是将其动态的字符串执行的 语句打出来。。
    用print @SQL
    SELECT c_datetime,c_bzs FROM sc2005 
    where convert(char(7),c_datetime,102)=2005.01 and convert(char(8),c_datetime,108)="00:00:00" 
    and Tag=GSDYH_JXC_LJLL 
    ORDER BY c_datetime ASC一看就知道有问题。。
    where convert(char(7),c_datetime,102)=2005.01 and convert(char(8),c_datetime,108)="00:00:00" 
    and Tag=GSDYH_JXC_LJLL 
    --这是有问题的,正确有格式是
    where convert(char(7),c_datetime,102)='2005.01' and convert(char(8),c_datetime,108)='00:00:00'
    and Tag='GSDYH_JXC_LJLL'
    所以存储也要做相应的修改。。CREATE PROCEDURE GetDay
    (
    @datetime char(7),
    @table char(6),
    @watermetername nvarchar(100)
    )
    ASDECLARE @SQL AS  nvarchar(3500) 
    SET @SQL='SELECT c_datetime,c_bzs FROM' + ' ' + @table
    SET @SQL=@SQL + ' ' + 'where convert(char(7),c_datetime,102)=''' +@datetime+''''
    SET @SQL=@SQL + ' ' + 'and convert(char(8),c_datetime,108)=' +'''00:00:00'''
    SET @SQL=@SQL + ' ' + 'and Tag=''' + @watermetername+''''
    SET @SQL=@SQL+ ' ' + 'ORDER BY c_datetime ASC'--print @SQL returnEXECUTE sp_executesql @SQL
    GO