我们刚刚在旧的生产存储过程中遇到过这种情况(这里还有很多内容,但这只是其逻辑的一个部分)。为什么有人会从表中选择前0行?这是某种我不熟悉的SQL黑客或技巧吗?
答案 0 :(得分:45)
它是一种获得空集的方式;例如,创建一个新的空表,其列与现有的列相同;
SELECT TOP 0 * INTO new_table FROM old_table
或者作为列名的来源
或者作为返回列详细信息但没有数据到客户端层的方法
或者作为检查连接性的查询
与之相同;
SELECT * FROM table WHERE 0=1
答案 1 :(得分:26)
命名UNION ALL中的列
一定要阅读Alex K.的答案。他有很多我使用过的理由。这只是最明显的一个。
答案 2 :(得分:3)
通过这样做,您有一个空的结果集,包含所有列而不是没有结果。 如果使用存储过程的程序需要某些列,否则会崩溃。
答案 3 :(得分:2)
您可以使用它来获取列名称。
答案 4 :(得分:1)
使用它来创建一个临时表,其中DB和TEMPDB的排序规则可能不同。
$('#myTablet tr').on('click', function (e) {
e.preventDefault();
$(e.currentTarget).find('td').each(function(i,e) {
console.info($(e).text();
});
});
生成与我的表具有相同排序规则的临时表。这意味着
SELECT TOP(0) column INTO #temp FROM [mytable]
由于归类错误而失败。
答案 5 :(得分:0)
让我提供其他用途:
如果要在输出中而不是在消息中打印消息,则可以使用
select top 0 0 'Your message here'
代替
print 'Your message here'
答案 6 :(得分:0)
您可以使用它来检查SQL语法是否正确而不加载任何数据。
答案 7 :(得分:-1)
我在从现有数据库表创建临时表时主要使用它 - 没有任何数据。以下比使用top更可靠。
SELECT * FROM <table_name> LIMIT 0;