CREATE PROCEDURE [DeleteFromUsers]
(@name_1  [char],
 @age_2  [char])AS DELETE [lyjqgds].[dbo].[users] WHERE 
( [name]  = @name_1 AND
 [age]  = @age_2)
GO在查询分析器中调用此过程并且正确传递了参数,后台也没提示错误,执行完毕之后,对应记录竟然没删除!!???
TRY了N 便,仍然如此,请各位帮忙

解决方案 »

  1.   

    CREATE PROCEDURE [DeleteFromUsers]
    (@name_1 [char],
     @age_2 [char])AS 
    select top 1 * form [lyjqgds].[dbo].[users] DELETE [lyjqgds].[dbo].[users] WHERE 
    ( [name] = @name_1 AND
     [age] = @age_2)
    GO
    进行测试看看有没有查数据出来先,要是查出了就说明调用了此存储过程
      

  2.   

    CREATE PROCEDURE [DeleteFromUsers]
    (@name_1 Varchar(50),--定义char时,只取参数的第一个字母,查无此条件,故不能删除
     @age_2  Varchar(50))AS 
      Delete [lyjqgds].[dbo].[users] 
      Where [name] = @name_1 AND  [age] = @age_2
    GO
    ----
    Exec DeleteFromUsers 'abc','23' --以前的@name_1 char 只接收了字母'a',故条件不符合!
      

  3.   

    CHAR是个很惹祸精,不要随便用。
      

  4.   

    CREATE TABLE Users(
    [name] CHAR,
    [age]  CHAR
    )INSERT INTO Users([name],[age]) SELECT 'AAA','20'
    UNION ALL SELECT 'BBB','21'
    UNION ALL SELECT 'BBB','21'
    UNION ALL SELECT 'CCC','28'
    UNION ALL SELECT 'CCC','28'
    UNION ALL SELECT 'AAA','20'服务器: 消息 8152,级别 16,状态 9,行 6
    将截断字符串或二进制数据。
    语句已终止。改为:这样就可以写入到表中了
    INSERT INTO Users(name,age) SELECT 'A','2'
    UNION ALL SELECT 'B','1'
    UNION ALL SELECT 'B','1'
    UNION ALL SELECT 'C','2'
    UNION ALL SELECT 'C','2'
    UNION ALL SELECT 'A','2'(所影响的行数为 6 行)
    SELECT * FROM Usersname age  
    ---- ---- 
    A    2
    B    1
    B    1
    C    2
    C    2
    A    2(所影响的行数为 6 行)
    CREATE PROCEDURE [DeleteFromUsers](
    @name_1 [char],
    @age_2 [char]
    )
    AS 
    DELETE Users WHERE [name]=@name_1 AND [age]=@age_2
    GO测试一:
    EXEC DeleteFromUsers 'A','2'
    (所影响的行数为 2 行)
    SELECT * FROM Users
    name age  
    ---- ---- 
    B    1
    B    1
    C    2
    C    2(所影响的行数为 4 行)测试二:EXEC DeleteFromUsers 'BC','1'(所影响的行数为 0 行)
    测试三:
    EXEC DeleteFromUsers 'BC','1'(所影响的行数为 2 行)name age  
    ---- ---- 
    C    2
    C    2(所影响的行数为 2 行)
    测试四:
    EXEC DeleteFromUsers 'BC','2'
    (所影响的行数为 0 行)综上所述:
    char[(n)]
    长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
    如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页由于没有批定长度,所以执行以下语句INSERT INTO Users([name],[age]) SELECT 'AAA','20'
    UNION ALL SELECT 'BBB','21'
    UNION ALL SELECT 'BBB','21'
    UNION ALL SELECT 'CCC','28'
    UNION ALL SELECT 'CCC','28'
    UNION ALL SELECT 'AAA','20'出现这样的错误信息服务器: 消息 8152,级别 16,状态 9,行 6
    将截断字符串或二进制数据。
    语句已终止。
    在存储过程中,也只能接收到一位字符,可以从测试二和测试四中看出来
    大家以后少用char,尽量用varchar 来替代