小编Pரத*_*ீப்的帖子

在Sql Server中计算

我试图执行以下计算

样本数据:

CREATE TABLE #Table1
  (
     rno   int identity(1,1),
     ccp   varchar(50),
     [col1] INT,
     [col2] INT,
     [col3] INT,
     col4 as [col2]/100.0
  );

INSERT INTO #Table1
            (ccp,[col1],[col2],[col3])
VALUES      ('ccp1',15,10,1100),
            ('ccp1',20,10,1210),
            ('ccp1',30,10,1331),
            ('ccp2',10,15,900),
            ('ccp2',15,15,1000),
            ('ccp2',20,15,1010)

+-----+------+------+------+------+----------+
| rno | ccp  | col1 | col2 | col3 |   col4   |
+-----+------+------+------+------+----------+
|   1 | ccp1 |   15 |   10 | 1100 | 0.100000 |
|   2 | ccp1 |   20 |   10 | 1210 | 0.100000 |
|   3 | ccp1 |   30 | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

39
推荐指数
4
解决办法
3462
查看次数

SQL Server:如何测试字符串是否只有数字字符

我在SQL Server 2008中工作.我正在尝试测试字符串(varchar)是否只有数字字符(0-9).我知道IS_NUMERIC函数可以产生虚假结果.(我的数据可能有$符号,不应该通过测试.)所以,我正在避免这个功能.

我已经有一个测试,看看一个字符串是否有任何非数字字符,即,

some_column LIKE '%[^0123456789]%'
Run Code Online (Sandbox Code Playgroud)

我认为唯一的数字测试会是类似的,但我画了一个空白.有任何想法吗?

sql sql-server sql-server-2008

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

如何从Laravel执行存储过程

我需要在表单提交数据后执行存储过程.我的存储过程就像我想要的那样工作,并且我的表单正常工作.我只是不知道从laravel 5执行sp的语句.

它应该是这样的:执行my_stored_procedure.但我似乎无法在网上找到类似的东西.

php sql-server stored-procedures laravel laravel-5

28
推荐指数
4
解决办法
5万
查看次数

无法为链接服务器null创建OLE DB提供程序Microsoft.Jet.OLEDB.4.0的实例

我试图从我的Table数据导出到Excel通过T-SQL查询.经过一些研究,我想出了这个

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
                        'Excel 8.0;Database=G:\Test.xls;', 
                        'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM   dbo.products 
Run Code Online (Sandbox Code Playgroud)

当我执行上述查询时出现此错误

消息7302,级别16,状态1,行7无法为链接服务器"(null)"创建OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"的实例.

所以通过互联网寻求解决方案,得到以下链接

https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-错误/

在上面的链接中,他们说我们需要管理员在C盘 TEMP文件夹中创建文件夹,因为在文件夹中OPENROWSET创建了一些文件或文件TEMP

我在My Home PC中这样做,我是管理员.仍然得到同样的错误.

SQL SERVER详细信息

Microsoft SQL Server 2016(RC1) - 13.0.1200.242(X64)2016年3月10日16:49:45版权所有(c)Windows 10 Pro 6.3上的Microsoft Corporation企业评估版(64位)(Build 10586 :)

任何解决问题的指针都将受到高度赞赏

更新:我已经配置了Ad Hoc Distributed Queries

执行以下查询

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 
Run Code Online (Sandbox Code Playgroud)

现在我收到了这个错误

消息7438,级别16,状态1,行7 32位OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"无法在64位SQL Server上进行加载.

sql sql-server export-to-excel openrowset

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

OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"不能用于分布式查询

我想使用查询将数据从Excel导入SQL Server,而不是使用向导.我试过这个查询:

Select * INTO g FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\new.xlsx;HDR=YES', 'SELECT * FROM [newSheet$]');
Run Code Online (Sandbox Code Playgroud)

但是,我收到了这个错误:

消息7308,级别16,状态1,行1
OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行.

所以我在谷歌搜索,得到的回答如下:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

即使在重新配置后它也会向我显示相同的错误......

sql sql-server excel

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

将Excel从Azure Blob存储导入Sql Server时出现数据截断问题

我正在尝试将Azure Blob存储中存在的以下Excel文件导入SQL Server

EXCEL文件

在此处输入图片说明

询问

SELECT * 
    FROM OPENROWSET(
        BULK 'container/testfile.xlsx', 
        DATA_SOURCE = 'ExternalSrcImport',
        FORMATFILE='container/test.fmt', FORMATFILE_DATA_SOURCE = 'ExternalSrcImport',
        codepage = 1252,
        FIRSTROW = 1
        ) as data
Run Code Online (Sandbox Code Playgroud)

格式化文件

10.0  
4  
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""  
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""  
Run Code Online (Sandbox Code Playgroud)

格式文件说明

在此处输入图片说明

当我执行查询时,出现以下错误

消息4863,级别16,状态1,行210的行1,列1(部门ID)的大负荷数据转换错误(截断)。

看起来格式文件中的字段终止符不起作用,导入文件有什么想法吗?

sql sql-server azure openrowset azure-blob-storage

12
推荐指数
1
解决办法
205
查看次数

如何计算运行乘法

我有两张桌子

WAC表

ID  wac_inc             item
--  -----------------   ----
1   2.310000000000000   A
2   1.100000000000000   A
3   2.130000000000000   A
4   1.340000000000000   A
Run Code Online (Sandbox Code Playgroud)

基线表

item    baseline
----    ------------------
A       10.000000000000000
Run Code Online (Sandbox Code Playgroud)

预期结果

ID  wac_inc             item    Running_Mul   
--  -----------------   ----    -----------
1   2.310000000000000   A       10.231     --  10 * (1+(2.310000000000000/100))
2   1.100000000000000   A       10.343541  --  10.231 * (1+(1.100000000000000/100))
3   2.130000000000000   A       10.563858  --  10.343541 * (1+(2.130000000000000/100))
4   1.340000000000000   A       10.705413  --  10.563858 * (1+(1.340000000000000/100))
Run Code Online (Sandbox Code Playgroud)

找到的公式running_mul

基线*(1 +(wac_inc/100))

SQLFIDDLE

这里对于每一行,前一行的Running_Mul值是baseline和第一行的baseline …

sql sql-server sql-server-2008

11
推荐指数
3
解决办法
1942
查看次数

使用#temp表的SQL Server多重REPLACE

我试图在SQL Server查询中替换多个字符,并希望通过#temp表而不是嵌套的REPLACE来实现.我在下面得到了SQL代码,想要实现像这样的结果

ABC
DEF
GHI

IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2

CREATE TABLE #temp
(
    STRING_TO_REPLACE NVARCHAR(5)
)
INSERT INTO #temp (STRING_TO_REPLACE)
VALUES            (' ')
                 ,('/')
                 ,('_') 

CREATE TABLE #temp2
(
    STRING_NAME NVARCHAR(5)
)

INSERT INTO #temp2 (STRING_NAME)
VALUES            ('A BC')
                 ,('D/EF')
                 ,('G_HI')

SELECT REPLACE(t2.STRING_NAME,(SELECT t1.STRING_TO_REPLACE   
                               FROM #temp t1),'') 
 FROM #temp2 t2

IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2
Run Code Online (Sandbox Code Playgroud)

我可以用嵌套替换来实现结果

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

10
推荐指数
1
解决办法
1646
查看次数

根据其他列重置"运行总计"

我试图计算运行总数.但是当累计和大于另一列值时,它应该重置

create table #reset_runn_total
(
id int identity(1,1),
val int, 
reset_val int
)

insert into #reset_runn_total
values 
(1,10),
(8,12),(6,14),(5,10),(6,13),(3,11),(9,8),(10,12)
Run Code Online (Sandbox Code Playgroud)

样本数据

+----+-----+-----------+
| id | val | reset_val |
+----+-----+-----------+
|  1 |   1 |        10 |
|  2 |   8 |        12 |
|  3 |   6 |        14 |
|  4 |   5 |        10 |
|  5 |   6 |        13 |
|  6 |   3 |        11 |
|  7 |   9 |         8 |
|  8 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server running-total sql-server-2012

10
推荐指数
1
解决办法
380
查看次数

在单独的CTE中调用具有不同参数的多语句TVF,显示错误的结果

我试图在同一个查询中使用不同的参数两次调用TVF,但由于某种原因,当我将结果加在一起时,其中一个结果掩盖了另一个.我把问题简化为这个小例子:

拿这个内联TVF:

CREATE FUNCTION dbo.fnTestErrorInline(@Test INT)
RETURNS TABLE 
AS
RETURN 
(
    SELECT ID, Val
    FROM (VALUES 
        (1, 1, 10), 
        (1, 2, 20), 
        (1, 3, 30), 
        (1, 4, 40), 
        (2, 1, 50), 
        (2, 2, 60), 
        (2, 3, 70), 
        (2, 4, 80)
    ) t(Test, ID, Val)
    WHERE t.Test=@Test
)
Run Code Online (Sandbox Code Playgroud)

和等效的多线函数:

CREATE FUNCTION dbo.fnTestErrorMultiline(@Test INT)
RETURNS @tbl TABLE (
    ID INT NOT NULL, 
    Val INT NOT NULL
)
AS
BEGIN
    IF @Test=1
    INSERT INTO @tbl (ID, Val) VALUES 
    (1, 10),
    (2, 20),
    (3, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server user-defined-functions common-table-expression

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