1. sql中删除的问题
把存储过程贴出来看一下
如果这样写
declare @name as varchar(20)
declare @sql as varchar(200)
set @sql='delete from userinformation where 姓名='+@name
exec(@sql)
这样是错误的,执行时会变成
delete from userinformation where 姓名=张三
可以改成下面的样子
set @sql='delete from userinformation where 姓名='+char(39)+@name+char(39)
exec(@sql)
或者
delete from userinformation where 姓名=@name
如果还不正确,最好贴出代码
----------------------
应该和主键没关系,你的主键是标识列
----------------------------
(@姓名_1 [char])
改成
@姓名_1 char(50)
试试
2. sql语句删除行的问题
显示的话用select就好了,删除用delete就好了,重点是确定你的表的主键,从这里看来这个表的主键应当是bh,
所以你可以使用select
*
from
table-name
where
bh
=
E10...(这里是567行的那个bh项).
如果要删除的话使用delete
from
table-name
where
bh=
E10...(同上)
希望能够帮助到你,如还有什么问题,请留言。
3. SQL对数据进行修改、删除时需要注意哪些问题
情况分析:
1、少量数据修改、删除
2、多数据修改、删除
解题思路:
为了保证正确的执行命令,需要对修改/删除前的数据进行查看,筛选出相关数据之后,再进行操作
解题方法:
1、少量数据:可先用SELECT命令,根据WHERE条件,将信息先查询出来,判断这些数据是否是要修改的数据
2、多数据:
同第一种方式一样,先用SELECT命令查询出来,记录下条件信息
然后用利用存储过程、事物两种技术。用存储过程封存,里面加上@@ERROR等一系列判断,出现问题,则回滚事物,否则提交事物
4. SQL删除数据的问题
有两种办法
1、TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作。
语法 TRUNCATE TABLE name
参数 name 是要截断的表的名称或要删除其全部行的表的名称。
2、Delete from tablename where 1=1
5. sql中的删除问题
delete A WHERE department <> '总部'
看看delete语法:
DELETE
从表中删除行。
语法
DELETE
[ FROM ]
{ table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}
[ FROM { < table_source > } [ ,...n ] ]
[ WHERE
{ < search_condition >
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
] }
}
]
[ OPTION ( < query_hint > [ ,...n ] ) ]
< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ]
| rowset_function [ [ AS ] table_alias ]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >
< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| < joined_table >
< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ < join_hint > ]
JOIN
< table_hint_limited > ::=
{ FASTFIRSTROW
| HOLDLOCK
| PAGLOCK
| READCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}
< table_hint > ::=
{ INDEX ( index_val [ ,...n ] )
| FASTFIRSTROW
| HOLDLOCK
| NOLOCK
| PAGLOCK
| READCOMMITTED
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}
< query_hint > ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| FAST number_rows
| FORCE ORDER
| MAXDOP
| ROBUST PLAN
| KEEP PLAN
}
参数
FROM
是可选的关键字,可用在 DELETE 关键字与目标 table_name、view_name 或 rowset_function_limited 之间。
table_name
是要从其中删除行的表的名称。
在其作用域内的 table 变量、或是将 OPENDATASOURCE 函数作为服务器名称的由四部分组成的表名(或视图名称)还可以在 DELETE 语句中作为表源使用。
WITH (<table_hint_limited> [...n])
指定目标表所允许的一个或多个表提示。需要有 WITH 关键字和圆括号。不允许有 READPAST、NOLOCK 和 READUNCOMMITTED。有关表提示的更多信息,请参见 FROM。
view_name
是视图名称。在视图的 FROM 子句中,view_name 引用的视图必须可更新且正确引用一个基表。有关可更新视图的更多信息,请参见 CREATE VIEW。
说明 如果表或视图存在于另一个数据库内或有一个不同于当前用户的所有者,则使用格式为 server_name.database.[owner].object_name 的由四部分组成的合法名称。有关更多信息,请参见 Transact-SQL 语法规则。
rowset_function_limited
OPENQUERY 或 OPENROWSET 函数,视提供程序功能而定。有关提供程序所需功能的更多信息,请参见 OLE DB 提供程序的 UPDATE 和 DELETE 语句要求。有关行集函数的更多信息,请参见 OPENQUERY 和 OPENROWSET。
FROM < table_source >
指定附加的 FROM 子句。这个对 DELETE 的 Transact-SQL 扩展使您得以从 <table_sources> 指定数据,并从第一个 FROM 子句内的表中删除相应的行。
这个扩展指定联接,可在 WHERE 子句中取代子查询来标识要删除的行。
table_name [[AS] table_alias ]
是为删除操作提供标准值的表名。
view_name [ [ AS ] table_alias ]
是为删除操作提供标准值的视图名称。带 INSTEAD OF UPDATE 触发器的视图不能是含有 FROM 子句的 UPDATE 的目标。
WITH (<table_hint>
指定一个或更多表提示。有关表提示的更多信息,请参见 FROM。
rowset_function [ [AS] table_alias ]
是行集函数名和可选别名。有关行集函数列表的更多信息,请参见行集函数。
derived_table [AS] table_alias
是从数据库中检索行的子查询。derived_table 用作对外部查询的输入。
column_alias
替换结果集内列名的可选别名。在选择列表中放入每个列的一个别名,并将整个列别名列表用圆括号括起来。
<joined_table>
由两个或更多表的积组成的结果集,例如:
SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1 = tab4.c1
ON tab2.c3 = tab4.c3
对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。
<join_type>
指定联接操作的类型。
INNER
指定返回每对匹配的行。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。
LEFT [OUTER]
指定在结果集内包含左表中所有不满足指定条件的行,并将右表中的输出列设置为 NULL 以作为对内联接所返回的所有行的补充。
RIGHT [OUTER]
指定在结果集内包含右表中所有不满足指定条件的行,并将左表中的输出列设置为 NULL 以作为对内联接所返回的所有行的补充。
FULL [OUTER]
如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为 NULL。除此之外,结果集中还包含通常由内联接返回的所有行。
JOIN
是表示在删除操作中使用 SQL-92 式联接的关键字。
ON <search_condition>
指定联接所基于的条件。尽管经常使用列和比较运算符,但此条件可指定任何谓词,例如:
FROM Suppliers JOIN Procts
ON (Suppliers.SupplierID = Procts.SupplierID)
当条件指定列时,列不必具有相同的名称或数据类型;但是,如果数据类型不一致,则这些列必须相互兼容或是 Microsoft® SQL Server™ 能够隐性转换的类型。如果数据类型不能隐性转换,则条件必须使用 CAST 函数显式转换数据类型。
有关搜索条件和谓词的更多信息,请参见搜索条件。
CROSS JOIN
指定两个表的矢量积。这将返回相同的行,就好像在旧式的非 SQL-92 式联接中并没有指定 WHERE 子句。
WHERE
指定用于限制删除行数的条件。如果没有提供 WHERE 子句,则 DELETE 删除表中的所有行。基于 WHERE 子句中所指定的条件,有两种形式的删除操作。
搜索删除指定搜索条件限定删除的行。
定位删除使用 CURRENT OF 子句指定游标。删除操作在游标的当前位置发生。这比使用 WHERE search_condition 子句限定删除的行的搜索 DELETE 精确。如果搜索条件不唯一标识单行,则搜索 DELETE 删除多行。
<search_condition>
指定删除行的限定条件。对搜索条件中可以包含的谓词数量没有限制。有关更多信息,请参见搜索条件。
CURRENT OF
指定在指定游标的当前位置完成 DELETE。
GLOBAL
指定 cursor_name 指的是全局游标。
cursor_name
是从其中进行提取的打开游标的名称。当全局和局部游标都以 cursor_name 作为它们的名称存在时,如果指定 GLOBAL,则 cursor_name 引用全局游标,如果未指定 GLOBAL,则 cursor_name 引用局部游标。游标必须允许更新。
cursor_variable_name
是游标变量的名称。游标变量必须引用允许更新的游标。
OPTION (<query_hint> [,...n] )
是表示使用优化程序提示自定义 SQL Server 的语句处理的关键字。
{HASH | ORDER} GROUP
指定在查询的 GROUP BY 或 COMPUTE 子句中指定的聚合使用哈希或排列。
{MERGE | HASH | CONCAT} UNION
指定所有的 UNION 操作通过合并、哈希或串联 UNION 集合来完成。如果指定了不止一个 UNION 提示,查询优化器就会从这些指定的提示中选择开销最少的策略。
说明 如果还为 FROM 子句中的某对链接表指定了 <joint_hint>,则这个提示优先于 OPTION 子句中所指定的任何 <join_hint>。
FAST number_rows
指定对查询进行优化,以便快速检索第一个 number_rows(非负整数)。在第一个 number_rows 返回后,查询继续进行并生成完整的结果集。
FORCE ORDER
指定在查询优化过程中保持由查询语法表示的联接顺序。
MAXDOP number
只对指定了 sp_configure 的 max degree of parallelism 配置选项的查询替代该选项。当使用 MAXDOP 查询提示时,所有和 max degree of parallelism 配置选项一起使用的语义规则均适用。有关更多信息,请参见 max degree of parallelism 选项。
ROBUST PLAN
强制查询优化器尝试执行一个计划,该计划以性能为代价获得最大可能的行大小。如果不能使用这样的计划,查询优化器将返回错误而不是延迟对查询执行的错误检测。行可以包含可变长度列;SQL Server 允许将行大小定义为超过 SQL Server 处理能力的最大可能的大小。通常,应用程序存储实际大小在 SQL Server 处理能力范围内的行,而不管最大可能大小。如果 SQL Server 遇到过长的行,则返回执行错误。
KEEP PLAN
强制查询优化器对查询放宽估计的重新编译阈值。当对表中索引列的更改(更新、删除或插入)达到估计数目时查询会自动重新编译,该估计数目即为重新编译阈值。指定 KEEP PLAN 将确保当表有多个更新时不会频繁地对查询进行重新编译。
注释
如果所修改的对象是 table 变量,则 DELETE 可用在用户定义函数的正文中。
对于由四部分组成的表名(或视图名称),若其中的服务器名称使用的是 OPENDATASOURCE 函数,则该表名可以在表名能够出现的任何位置作为表源使用。
如果 DELETE 语句违反了触发器,或试图删除另一个有 FOREIGN KEY 约束的表内的数据所引用的行,则可能会失败。如果 DELETE 删除了多行,而在删除的行中有任何一行违反触发器或约束,则将取消该语句,返回错误且不删除任何行。
如果在对表或视图的 DELETE 操作上定义了 INSTEAD-OF 触发器,该触发器将执行 instead of DELETE 语句。SQL Server 的早期版本只支持 DELETE 上的 AFTER 触发器和其它修改语句。
当 DELETE 语句遇到在表达式评估过程中发生的算术错误(溢出、被零除或域错误)时,SQL Server 将处理这些错误,就好象 SET ARITHABORT 打开一样。将取消批处理中的其余部分并返回错误信息。
对远程表和本地及远程分区视图上的 DELETE 语句将忽略 SET ROWCOUNT 选项的设置。
如果要删除在表中的所有行,则 TRUNCATE TABLE 比 DELETE 快。DELETE 以物理方式一次删除一行,并在事务日志中记录每个删除的行。TRUNCATE TABLE 则释放所有与表关联的页。因此,TRUNCATE TABLE 比 DELETE 快且需要的事务日志空间更少。TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 相当,但是 TRUNCATE TABLE 不能用于由外键引用的表。DELETE 和 TRUNCATE TABLE 都使删除的行所占用的空间可用于存储新数据。
权限
默认情况下,将 DELETE 权限授予 sysadmin 固定服务器角色成员、db_owner 和 db_datawriter 固定数据库角色成员以及表所有者。sysadmin、db_owner 和 db_securityadmin 角色成员和表所有者可以将权限转让给其他用户。
如果语句包含 WHERE 子句,则还必须有 SELECT 权限。
示例
A. 不带参数使用 DELETE
下例从 authors表中删除所有行。
USE pubs
DELETE authors
B. 在行集上使用 DELETE
因为 au_lname 可能不是唯一的,下例删除其中的 au_lname 是 McBadden 的所有行。
USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'
C. 在游标的当前行上使用 DELETE
下例显示在名为 complex_join_cursor 的游标上所做的删除。它只影响当前从游标提取的单行。
USE pubs
DELETE FROM authors
WHERE CURRENT OF complex_join_cursor
D. 基于子查询使用 DELETE 或使用 Transact-SQL 扩展
下例显示基于联接或相关子查询从基表中删除记录的 Transact-SQL 扩展。第一个 DELETE 显示与 SQL-92 兼容的子查询解决方法,第二个 DELETE 显示 Transact-SQL 扩展。两个查询都基于存储在 titles 表中的标题从 titleauthors 表中删除行。
/* SQL-92-Standard subquery */
USE pubs
DELETE FROM titleauthor
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE title LIKE '%computers%')
/* Transact-SQL extension */
USE pubs
DELETE titleauthor
FROM titleauthor INNER JOIN titles
ON titleauthor.title_id = titles.title_id
WHERE titles.title LIKE '%computers%'
E. 在 DELETE 和 SELECT 中使用 TOP 子句
由于可以在 DELETE 语句中指定 SELECT 语句,因此还可以在 SELECT 语句中使用 TOP 子句。例如,下例从 authors 表中删除前 10 个作者。
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
6. sql删除表格失败
建议你这样试试看:
看下是不是有外键约束,如果有外键约束的话,需要先删除才能删除数据表
查看执行SQL语句后的错误信息,分析问题所在
7. sql删除语句的问题
方法1:在多些一条delete的sql语句,删除其他表的相应字段方法2:给student创建delete触发器方法3:既然stuid是arrange的外键,那么可以对arrange表创建外键约束,在删除student的时候会自动将arrange表相应字段给删除掉(sql外键约束自带功能,就看你有没设置了)
8. 数据库的SQL删除语句问题
restrict: 确保只有不存在相关视图和 完整性约束的表才能删除
cascade: 任何相关视图和完整性约束一并被删除
orop是清楚表格
9. sql语句多表删除问题
原则上,同意youyuan1688和ytbelwxg的方法. 5个表,如果每个表都和lm_company表的comid字段有直接主外键关系.那么ytbelwxg的方法是最佳方案; 仔细看了你的连接条件,猜想,并不是每个表都和lm_company表的comid字段有直接主外键关系.所以通过主外键级联删除的方案就不可行,那么就必须逐个表来删除,而且删除的顺序也有讲究,先删子表,再删主表. 本例中,删除的顺序应该是e,d,c,b,a; --1.删除e; sql1="delete from lm_newsinfo from lm_newsinfo as e, lm_company as a where a.comid=e.news_comid and a.comid=" + lblid.Text +";" --2.删除d; sql2="delete from lm_message from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c ,lm_message as d where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and c.Bkinfo_id=d.message_bookid and a.comid=" + lblid.Text +";" --删除c; sql3="delete from lm_Bookinfo from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and a.comid=" + lblid.Text + ";" --删除b; sql4="delete from lm_Yuzhan where yuzhan_comid=" + lblid.Text + ";" --删除a; sql5="delete from lm_company where comid=" + lblid.Text + ";" --合并sql1,sql2,sql3,sql4,sql5 sql=sql1+sql2+sql3+sql4+sql5 --在你的客户端执行sql命令串即可
10. SQL 删除问题
建议你使用两个步骤来完成这个功能,这样可以避免误删除,毕竟你的时间只精确到秒,但是服务器时间中是精确到毫秒的,所以你这样查询中用“=”来做判断是不正确的,可能根本无法查询到结果,你可以参考下面的步骤
1、根据‘2013-04-02 09:19:43’作为条件来查询出数据iD,根据ID来删除,这样可以确保不会误删其他的数据,毕竟如果站在服务器角度,同一秒产生多条数据是很平常的事情,因此你可能会获得多个ID。
2、使用日期函数来处理时间比较,而不要直接用=来比较,如果你更喜欢用运算符的话,你要考虑如果同一秒有多条数据你如何取舍,是全部删除吗?还有毫秒数的对比,很多时候你并非DBA的情况下并无法看到数据的实际内容。
3、如果不考虑同一秒多条数据的情况,或者同一秒的数据都不要的情况下,建议将“=”改成begin and来处理时间。啰嗦一句,begin and使用中begin是包含的,不包含end所述时间。也可以用>= and <来解决