我正在从其他来源导入数据,该来源有多个列,但我在日期列中遇到问题,就像我在此列中有多种格式一样:
dd/mm/yyyy
mm/dd/yyyy
mmm-yyyy
Run Code Online (Sandbox Code Playgroud)
您能否指导我在迁移数据期间如何适应这些格式(使用游标将数据从临时表传输到目标表)。
我如何将mmm-yyyy日期格式转换为dd/mm/yyyy格式
我WAITFOR在以下脚本中与游标结合使用:
create table orders(orderId int primary key,productId int,productName varchar(20));
insert into orders values(1,11,'book');
insert into orders values(2,13,'flower');
insert into orders values(3,24,'microwave');
insert into orders values(4,7,'food');
insert into orders values(5,46,'clothes');
declare cur cursor for
select * from orders;
open cur;
fetch next from cur;
while(@@fetch_status=0)
begin
waitfor delay '00:00:01';
fetch next from cur;
end;
close cur;
deallocate cur;
Run Code Online (Sandbox Code Playgroud)
我希望每 1 秒的指定间隔显示来自光标的一条记录。例如:显示第一行,然后等待一秒钟;显示第二行,然后稍等;等等。上面的光标不会这样做。说orders有 5 行。该WHILE块等待 5 秒钟,然后一起显示所有记录。
这是游标的错吗?如何修改此脚本以按预期工作?
我正在从第三方供应商导入数据。我已经将他们的表导入到我现有的数据库中。现在,我只需要遍历他们的每条person记录,稍微修改一下,然后将其插入到我这边的几个表中。不过,我的光标似乎只迭代一次 - 这是代码。
DELIMITER @@
DROP PROCEDURE IF EXISTS import_members@@
CREATE PROCEDURE import_members ()
BEGIN
-- Declare loop constructs --
DECLARE done INT DEFAULT FALSE;
-- Declare Person variables --
DECLARE person_id INT;
DECLARE era_username VARCHAR(100);
DECLARE last_name VARCHAR(50);
DECLARE first_name VARCHAR(50);
DECLARE email VARCHAR(100);
DECLARE email_primary VARCHAR(50);
DECLARE degree_id_1 INT;
DECLARE degree_id_2 INT;
DECLARE member_status INT;
DECLARE user_id INT;
DECLARE user_email VARCHAR(100);
-- Declare Cursor --
DECLARE member_cursor CURSOR FOR
SELECT person_id, era_username, last_name, first_name, TRIM(email), TRIM(email_primary), …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个存储过程来将ntext我的数据库中的所有列转换为nvarchar(max).
这是代码
ALTER PROCEDURE [dbo].[usp_SL_ConvertNtextToNvarchar]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @table_name nvarchar(128)
DECLARE @column_name nvarchar(128)
DECLARE @totalCount int
DECLARE @count int
SET @totalCount = 0;
SET @count = 0;
-- Eventlogic
DECLARE tables_cursor CURSOR FOR
SELECT so.name as table_name, sc.name as column_name
FROM sys.objects so
JOIN sys.columns sc ON so.object_id = sc.object_id
JOIN sys.types stp ON sc.user_type_id = stp.user_type_id
AND stp.name = 'ntext'
WHERE so.type = 'U' -- to show only user tables
OPEN tables_cursor …Run Code Online (Sandbox Code Playgroud) 我似乎在这个光标中犯了一个错误,我似乎无法弄清楚我做错了什么。
我已经确认select拉回了 2 行。但是当我将它传递到游标中选择出现字符串时,我可以提取我需要的确切值。这两行看起来像下面这样......
|DATAIDONTWANT|...|DATAIDONTWANT|<|1|DATAIDONTWANT|<|2|DATAIDONTWANT|...|
|DATAIDONTWANT|...|DATAIDONTWANT|<|1|DATAIDONTWANT|<|2|DATAIDONTWANT|...|
Run Code Online (Sandbox Code Playgroud)
光标似乎抓住了第一行并不断循环,永远不会进入下一行或结束程序。
declare
@clobstringP varchar(max),
@clobstring varchar(max);
declare SevenCursor cursor for
select [value] as ClobP
from string_split(@clobstring, '>')
where value like '%<|2|%';
open SevenCursor;
fetch next from SevenCursor into @clobstringP;
while @@FETCH_STATUS = 0
begin
insert into [database].dbo.tablestuff ( ValueP )
select file387
from (
select
RowId387 = row_number() over( order by ( select 1 ) )
,file387 = [value]
from string_split(@clobstringP, '|')
) a
where a.RowId387 = 6;
end;
close SevenCursor;
deallocate …Run Code Online (Sandbox Code Playgroud) 我有一个简单的过程,存在于 150 多个数据库中。我可以将它们一一删除,这是软件开发界最愚蠢的工作。或者我可以以某种方式在一个查询中动态删除它们,这很聪明但不起作用。
我试过了:
execute sp_msforeachdb 'drop procedure Usages'
Run Code Online (Sandbox Code Playgroud)
我有:
无法删除过程“用法”,因为它不存在或您没有权限。
所以我想也许我为它创建了一个游标。于是我写道:
declare @command nvarchar(max) = '
drop procedure Usages
';
declare @databaseName nvarchar(100)
declare databasesCursor cursor for select [name] from sys.databases where database_id > 5
open databasesCursor
fetch next from databasesCursor into @databaseName
while @@fetch_status = 0
begin
print @databaseName
execute sp_executesql @command
fetch next from databasesCursor into @databaseName
end
close databasesCursor
deallocate databasesCursor
Run Code Online (Sandbox Code Playgroud)
再次,我收到了同样的消息。我想,也许它不会改变数据库的上下文,因此我在删除命令前面加上了给定数据库的名称,所以命令会变得类似于drop procedure [SomeDatabase].dbo.Usages,但后来我收到了:
“DROP PROCEDURE”不允许将数据库名称指定为对象名称的前缀。
所以,我想出动态执行,use @databaseName以便我可以在该数据库的上下文中删除过程。但它不起作用。我该怎么办?我被困在聪明的方法上,而且我现在比愚蠢的方法花费的时间更多。