想写一个输入表名、字段名称和值,来查询数据的存储过程,由于不知道输入、输出的字段是什么类型,所以一个定义为object。这样的存储过程怎么写?@FieldValue  object  说错误,没有这样的类型。

解决方案 »

  1.   

    比如 输入table1,field1=value1,要求查出 field2的值
      

  2.   

    输入表名、字段名称和值,来查询数据的存储过程,可以定义为varchar类型啊,表名、字段作为参数的话可以拼接就可以了
      

  3.   

    http://msdn.microsoft.com/zh-cn/library/ms173829.aspx
      

  4.   

    @FieldValue varchar(max) ,然后可以增加一个参数:@type  ,在存储过程中可以根据@type 来进行类型转换。
      

  5.   

    表名、字段名称和值表名 和字段名称 这个都是字符串 用varchar nvarchar 都可以既然有表和字段了,那就应该能获取到这个字段的数据类型了。
      

  6.   

    是这个样子吗???????
    --> 测试数据:#tb
    IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL DROP TABLE #tb
    GO 
    CREATE TABLE #tb([id] INT,[name] VARCHAR(4))
    INSERT #tb
    SELECT 1,'土豆' UNION ALL
    SELECT 2,'水锅' UNION ALL
    SELECT 3,'蠢驴'
    GO 
    --------------开始查询--------------------------
    IF OBJECT_ID('pp',N'P') IS NOT NULL DROP PROC pp
    GO 
    CREATE PROC pp(@tablename VARCHAR(10),@colname VARCHAR(10),@col VARCHAR(10), @out VARCHAR(10) OUTPUT)
    AS 
    BEGIN 
    DECLARE @sql NVARCHAR(4000) 
    SET @sql = 'select @a=[id] from ' + @tablename + ' where ' + @colname + ' = ' + '''' + @col + ''''
    --PRINT @sql
    EXEC sp_executesql 
      @sql ,
      N'@a VARCHAR(10) OUTPUT' ,
      @out OUTPUT  
    END 
    GO 
    --> 测试
    DECLARE @o VARCHAR(10)
    EXEC pp '#tb','name','土豆',@o OUTPUT
    SELECT  @o ----------------结果----------------------------
    /* 
    1
    */
      

  7.   

    create proc P_test
    @tablename varchar(50),
    @field varchar(50),
    @Value varchar(100)
    as
    begin
    declare @sql varchar(2000)
    set @sql='select * from '+@tablename+' where '+@field+'='+@Value
    exec(@sql)
    end
      

  8.   

    有个问题:如果输入的查询值的数据类型不是varchar呢?
      

  9.   

    我来教你
    输入的参数里有 @InValue  和 @intype
    @InValue 的类型是 sql varant在里面进行转换 
    declare @realVal=CONVERT(varchar(100),@InValue,100)
    这样就转换成varchar类型了然后根据intype判断where里面要不要加‘号。