例如考虑 SQL 查询:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC)
FROM
[FooTable] AS A
Run Code Online (Sandbox Code Playgroud)
在这里,我观察到按 A.[Name] 排序的返回结果。如果我将 ROW_NUMBER 函数中定义的排序列更改为另一列,那么结果将再次按该列排序。
我希望将行号分配给行,但我不希望这些行按照相同的标准进行排序。这仅仅是查询执行方式的副作用(在我的情况下是在 SQL Server 2008 R2 上)还是这种行为是否有保证?(我找不到这样的保证的参考)。
我创建了一个接受开始和结束日期的函数,结束日期是可选的。然后我CASE在过滤器中写了一个,如果没有通过结束日期,则使用开始日期。
CASE WHEN @dateEnd IS NULL
THEN @dateStart
ELSE @dateEnd
END
Run Code Online (Sandbox Code Playgroud)
当我为最近一个月的数据调用函数时:
SELECT * FROM theFunction ('2013-06-01', NULL)
Run Code Online (Sandbox Code Playgroud)
...查询挂起。如果我指定结束日期:
SELECT * FROM theFunction ('2013-06-01', '2013-06-01')
Run Code Online (Sandbox Code Playgroud)
... 结果正常返回。我从函数中取出代码并在查询窗口中正常运行。我也不能复制小提琴的问题。像这样的查询:
SELECT * FROM theFunction ('2013-04-01', '2013-06-01')
Run Code Online (Sandbox Code Playgroud)
...也工作正常。
查询(下面)中是否有任何内容可能导致函数NULL在结束日期传递时挂起?
我正在尝试将数据导入 SQL Server。我可以通过导入和导出数据向导导入。我无法使用BULK IMPORT或OPENROWSET因为文件不在服务器机器上从我的机器导入。IED 向导如何将数据插入其目标数据库?是一行一行的吗?
从我的机器导入数据还有其他可能的解决方案吗?
我在计算给定时间段内在日期范围内分布的小时数计算剩余天数时遇到了困难。对于此示例,时间段将是 2013-11-01 到 2013-05-01(它始终是 6 个月的时间段)。
这张calendar桌子有一个 30 年的套装。11 for 的值weekday表示周一至周五。
CREATE TABLE #calendar (
[d] date PRIMARY KEY,
[weekday] tinyint DEFAULT 0,
);
INSERT INTO #calendar ([d]) VALUES
('2006-01-01', 0),
...
('2013-01-01', 1),
('2013-01-02', 1),
('2013-01-03', 1),
...
('2014-12-28', 0),
('2014-12-29', 1),
('2014-12-30', 1),
('2014-12-31', 1),
...
('2035-12-31', 1);
CREATE TABLE #tasks (
[task] int PRIMARY KEY,
[begin] date,
[end] date,
[hours] decimal(6,3)
);
INSERT INTO #tasks ([task], [begin], [end], [hours]) VALUES …Run Code Online (Sandbox Code Playgroud) 不是 DBA 并且没有进行备份/恢复的系统管理员权限,以下是复制一组表的好解决方案吗?(我有一个从serverA到的链接服务器serverB)
复制表
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[copyTables]
AS
-- NOCOUNT ON added to prevent extra result sets from interfering
-- with SELECT statements. XACT_ABORT ON to terminate the transaction
-- and rollback if a run-time error occurs.
SET NOCOUNT, XACT_ABORT ON
BEGIN
DECLARE @serverName varchar(50), @dbName varchar(50), @schemaName varchar(50)
SET @serverName = QUOTENAME('serverB')
SET @dbName = QUOTENAME('db')
SET @schemaName = QUOTENAME('dbo')
BEGIN TRY
BEGIN TRANSACTION
EXEC [dbo].[copyTable] @serverName, …Run Code Online (Sandbox Code Playgroud) 我有一个包含两列的表,比如说名字和姓氏。我需要另一个表,其中对于第一对中的每一对名字,都包含共同姓氏的计数。
这在 SQL 中可行吗?
如果姓氏的唯一性会影响查询的效率,则姓氏的唯一性比名字的唯一性要多得多。
一个玩具示例,输入:
FirstName, LastName
John, Smith
John, Doe
Jane, Doe
Run Code Online (Sandbox Code Playgroud)
输出:
FirstName1, FirstName2, CommonLastNames
John, John, 2
John, Jane, 1
Jane, Jane, 1
Jane, John, 1
Run Code Online (Sandbox Code Playgroud)
由于这种关系是自反且对称的,因此如果结果只是三角形之一(例如,对角线上方的三角形)也没关系。
我试图找出一种方法,可以将文件名传递到可以导入文件的存储过程中。但是,动态设置SQL后,找不到对象。
DECLARE @fileName varchar(200),
@sql varchar(max);
SET @fileName = 'C:\file.csv';
SET @sql = 'SELECT *
INTO #import
FROM OPENROWSET(BULK ''' + @fileName + ''',
FORMATFILE=''C:\format.xml'',
FIRSTROW = 2) AS a';
EXEC(@sql);
SELECT * INTO #stage
FROM #import;
Run Code Online (Sandbox Code Playgroud)
结果
(27823 row(s) affected)
Msg 208, Level 16, State 0, Line 29
Invalid object name '#tmtImport'.
Run Code Online (Sandbox Code Playgroud)