小编gbn*_*gbn的帖子

SQL随机数不起作用

declare @fieldForceCounter as int
declare @SaleDate as dateTime
declare @RandomNoSeed as decimal

set @fieldForceCounter = 1
set @SaleDate = '1 Jan 2009'
set @RandomNoSeed = 0.0

WHILE @fieldForceCounter <= 3
   BEGIN

    while @SaleDate <= '1 Dec 2009' 
    begin       

        INSERT INTO MonthlySales(FFCode, SaleDate, SaleValue) VALUES(@fieldForceCounter, @SaleDate, RAND(@RandomNoSeed))

        set @saleDate = @saleDate + 1
        set @RandomNoSeed = Rand(@RandomNoSeed) + 1

    end

    set @SaleDate = '1 Jan 2009'
    set @fieldForceCounter = @fieldForceCounter + 1
   END
GO
Run Code Online (Sandbox Code Playgroud)

该 T-SQL 命令应该在“ SaleValue”表的“ MonthlySales”列中插入随机值。 …

sql sql-server random

2
推荐指数
1
解决办法
2540
查看次数

TSQL生成5个字符长度的字符串,数据库中尚不存在的所有数字[0-9]

最好的方法是什么?

我需要生成一个5位长的字符串,其中所有字符都是数字.但是,我需要能够执行此'x'次(用户变量)并将此随机字符串存储在数据库中.此外,我不能两次生成相同的字符串.6个月后将删除旧琴弦.

伪代码

DECLARE @intIterator INT,
 @intMax

SET @intIterator = 1
SET @intMax = 5 (number of strings to generate)

WHILE @intIterator <= @intMax
 BEGIN

  -- GENERATE RANDOM STRING OF 5 NUMERIC DIGITS 
   ???

  -- INSERT INTO DB IF DOESN'T ALREADY EXIST 
  INSERT INTO TSTRINGS
  SELECT @RANDOMSTRING

  IF @@ERROR = 0
    SET @intIterator = @intIterator + 1

 END
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是最好的方法,所以建议值得赞赏.但真正寻找有关如何生成数字5长度字符串的想法.

sql sql-server random

2
推荐指数
1
解决办法
5388
查看次数

将主键作为标识字段是否合适?

我已经阅读了很多关于我们是否应该将主键作为标识列的文章,但我仍然感到困惑.

使列具有标识的优点在于它可以在连接中提供更好的性能并提供数据一致性.但是有一个与标识相关的主要缺点,即当INSERT语句失败时,IDENTITY值仍会增加如果事务被回滚,则新的IDENTITY列值不会回滚,因此我们最终会在排序方面出现空白.我可以使用GUID(通过使用NEWSEQUENTIALID),但它会降低性能.

sql database-design identity primary-key uniqueidentifier

2
推荐指数
1
解决办法
898
查看次数

需要一些SQL查询的帮助

我需要一些SQL Server 2005 SQL查询的帮助.以下是要查询的表中数据的示例:

Id    PersonId      PayrollNum    ContractId     PayrollFrom     PayrollTo
---------------------------------------------------------------------------
 1     432642         85110892     1             01/05/2009      31/05/2009
 2     432642         85110892     1             01/06/2009      30/06/2009
 3     432642         85110892     1             01/07/2009      31/07/2009
 4     432642         85110892     2             01/05/2009      31/05/2009
 5     432642         85110892     2             01/06/2009      30/06/2009
 6     432642         85110892     2             01/07/2009      31/07/2009
 7     432642         85110892     2             01/08/2009      31/08/2009
 8     432642         35110892     1             01/06/2009      30/06/2009
 9     432642         35110892     1             01/05/2009      31/05/2009
10     432642         35110892     1             01/07/2009      31/07/2009

(我希望格式化好 - 用这个东西做表很难!)

我需要的输出如下:

Id
--
 1
 4
 9 …

sql t-sql sql-server sql-server-2005

2
推荐指数
1
解决办法
171
查看次数

共享存储过程

假设我有许多具有完全相同模式的sql server数据库.有没有可以编写存储过程并申请所有数据库的地方?如果我为每个数据库创建存储过程,在需要时,我必须全部更新它们.

sql t-sql sql-server stored-procedures

2
推荐指数
1
解决办法
1211
查看次数

为什么rownum上的sql查询都给出了不同的结果

>SELECT instmax  
FROM  
  (SELECT instmax,  
     rownum r  
  FROM  
    ( SELECT * FROM pswlinstmax ORDER BY instmax DESC NULLS LAST  
    )   
  )  
WHERE r = 2;  

INSTMAX  
-------  
1049  

>SELECT instmax  
FROM  
  (SELECT instmax,  
    rownum  
  FROM  
    (SELECT * FROM pswlinstmax ORDER BY instmax DESC  
    )  
  )  
WHERE rownum=2;  


**NO RETURNED ROW**  
Run Code Online (Sandbox Code Playgroud)

为什么会给出不同的结果?我想对此进行详细解释.

sql oracle plsql max rownum

2
推荐指数
1
解决办法
724
查看次数

SQL - 过滤后的顺序

如何订购数据然后在TSQL(SQL Server)中过滤?

我尝试过这样的事情:

SELECT [Job].*, 
    ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum 
FROM [Job] 
ORDER BY Rank 
WHERE RowNum >= @Start AND RowNum < @End
Run Code Online (Sandbox Code Playgroud)

不行.我也尝试使用子查询,抛出:

除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.

我不想使用TOP或FOR XML.

怎么解决这个?

sql t-sql sql-server sql-server-2005 sql-order-by

2
推荐指数
1
解决办法
1033
查看次数

有没有办法使用pyodbc将scope_identity()插入sql server 2005

我有这个伟大的pyodbc lib.我尝试下面的代码,它应该插入一行并返回行ID但它不起作用.顺便说一句,我在服务器上使用sql server 2005,客户端是windows os

...
con = pyodbc.connect('conectionString', autocommit = True)
cur = con.execute(
                  "insert into sometable values('something');
                  select scope_identity() as id"
                  )
for id in cur:
   print id
...
Run Code Online (Sandbox Code Playgroud)

一些想法?

python sql-server pyodbc

2
推荐指数
1
解决办法
2031
查看次数

与GO语句,未提交的事务和更改过程混淆

我想深究这一点,因为这让我感到困惑.任何人都可以解释我何时应该在我的脚本中使用GO语句?

据我所知,GO语句不是T-SQL语言的一部分,而是用于将一批语句发送到SQL服务器进行处理.

当我在查询分析器中运行以下脚本时,它似乎运行正常.然后我关闭窗口,它会显示一个警告:

"有未提交的交易.您是否希望在关闭窗口之前提交这些交易?"

BEGIN TRANSACTION;
GO 

ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

但是,如果我在ALTER语句的末尾添加一个GO就可以了(如下所示).怎么会?

BEGIN TRANSACTION;
GO



ALTER PROCEDURE [dbo].[pvd_sp_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

我想删除所有的GO,但是它抱怨alter procedure语句必须是查询批处理中的第一个语句?这只是我必须坚持的要求吗?

这看起来很奇怪,因为如果我BEGIN TRANSACTION和GO ....该语句被发送到服务器进行处理并开始一个事务.

接下来是ALTER过程,一个COMMIT TRANSACTION和一个GO(因此将这些语句发送到服务器进行处理,提交完成之前开始的事务),当我关闭窗口时它是怎么回事?当然,我已经满意alter procedure语句是批处理中的第一个.怎么抱怨未提交的交易.

任何帮助将非常感谢!

sql sql-server-2005 sql-server-2008

2
推荐指数
1
解决办法
4635
查看次数

如何查询记录包含SQL Server 2008中的双字节字符

在SqlServer中,我们有1个表 - 产品.它的一些记录包含双字节字符(如中文)和单字节字符(如英语).问题是如何查询包含双字节字符的记录.非常感谢你.

sql sql-server-2008

2
推荐指数
1
解决办法
1万
查看次数